Skip to content

Commit

Permalink
[KAN-31] 리뷰 api url, dto 설계 (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
sinkyoungdeok authored Apr 30, 2024
1 parent 196eaf4 commit 2add664
Show file tree
Hide file tree
Showing 13 changed files with 325 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,10 @@ data class GetLikeRestaurantsResponse(
)

data class LikeRestaurantRequest(
@ApiModelProperty(value = "현재 좋아요 했는지 여부", example = "LIKE", required = true)
val status: LikeRestaurantStatus
@ApiModelProperty(value = "현재 좋아요 했는지 여부", example = "false", required = true)
val isLike: Boolean
)
data class LikeRestaurantResponse(
@Schema(description = "좋아요한 식당 정보")
val restaurant: RestaurantDto
)

enum class LikeRestaurantStatus {
LIKE,
UNLIKE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.restaurant.be.review.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.review.presentation.dto.CreateReviewResponse
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.v3.oas.annotations.media.Content
import io.swagger.v3.oas.annotations.media.Schema
import io.swagger.v3.oas.annotations.responses.ApiResponse
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.security.Principal

@Api(tags = ["03. Review Info"], description = "리뷰 서비스")
@RestController
@RequestMapping("/api/v1/restaurants")
class CreateReviewController {

@PostMapping("/{restaurantId}/reviews")
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "리뷰 작성 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = CreateReviewResponse::class))]
)
fun createReview(
principal: Principal,
@PathVariable restaurantId: String
): CommonResponse<CreateReviewResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.restaurant.be.review.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.v3.oas.annotations.responses.ApiResponse
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.security.Principal

@Api(tags = ["03. Review Info"], description = "리뷰 서비스")
@RestController
@RequestMapping("/api/v1/restaurants/")
class DeleteReviewController {

@DeleteMapping("/{restaurantId}/reviews/{reviewId}")
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "리뷰 삭제 API")
@ApiResponse(
responseCode = "200",
description = "성공"
)
fun deleteReview(
principal: Principal,
@PathVariable restaurantId: String,
@PathVariable reviewId: String
): CommonResponse<Void> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.restaurant.be.review.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.review.presentation.dto.GetMyReviewResponse
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.v3.oas.annotations.media.Content
import io.swagger.v3.oas.annotations.media.Schema
import io.swagger.v3.oas.annotations.responses.ApiResponse
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.security.Principal

@Api(tags = ["03. Review Info"], description = "리뷰 서비스")
@RestController
@RequestMapping("/api/v1/restaurants/my-reviews")
class GetMyReviewController {

@GetMapping
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "내가 작성한 리뷰 리스트 조회 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = GetMyReviewResponse::class))]
)
fun getMyReview(
principal: Principal
): CommonResponse<GetMyReviewResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.restaurant.be.review.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.review.presentation.dto.GetReviewResponse
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.v3.oas.annotations.media.Content
import io.swagger.v3.oas.annotations.media.Schema
import io.swagger.v3.oas.annotations.responses.ApiResponse
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.security.Principal

@Api(tags = ["03. Review Info"], description = "리뷰 서비스")
@RestController
@RequestMapping("/api/v1/restaurants/reviews")
class GetReviewController {

@GetMapping
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "리뷰 리스트 조회 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = GetReviewResponse::class))]
)
fun getReview(
principal: Principal
): CommonResponse<GetReviewResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.restaurant.be.review.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.review.presentation.dto.LikeReviewRequest
import com.restaurant.be.review.presentation.dto.LikeReviewResponse
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.v3.oas.annotations.media.Content
import io.swagger.v3.oas.annotations.media.Schema
import io.swagger.v3.oas.annotations.responses.ApiResponse
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.security.Principal
import javax.validation.Valid

@Api(tags = ["03. Review Info"], description = "리뷰 서비스")
@RestController
@RequestMapping("/api/v1/restaurants")
class LikeReviewController {

@PostMapping("/{restaurantId}/reviews/{reviewId}/like")
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "리뷰 좋아요 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = LikeReviewResponse::class))]
)
fun likeReview(
principal: Principal,
@PathVariable restaurantId: String,
@PathVariable reviewId: String,
@RequestBody @Valid
request: LikeReviewRequest
): CommonResponse<LikeReviewResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.restaurant.be.review.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.review.presentation.dto.UpdateReviewResponse
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.v3.oas.annotations.media.Content
import io.swagger.v3.oas.annotations.media.Schema
import io.swagger.v3.oas.annotations.responses.ApiResponse
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.PatchMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.security.Principal
import javax.validation.Valid

@Api(tags = ["03. Review Info"], description = "리뷰 서비스")
@RestController
@RequestMapping("/api/v1/restaurants/reviews")
class UpdateReviewController {

@PatchMapping("/{restaurantId}/reviews/{reviewId}")
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "리뷰 수정 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = UpdateReviewResponse::class))]
)
fun updateReview(
principal: Principal,
@PathVariable restaurantId: String,
@PathVariable reviewId: String,
@RequestBody @Valid
request: UpdateReviewResponse
): CommonResponse<UpdateReviewResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.restaurant.be.review.presentation.dto

import com.restaurant.be.review.presentation.dto.common.ReviewRequestDto
import com.restaurant.be.review.presentation.dto.common.ReviewResponseDto
import io.swagger.annotations.ApiModelProperty

data class CreateReviewRequest(
@ApiModelProperty(value = "리뷰 정보", required = true)
val review: ReviewRequestDto
)

data class CreateReviewResponse(
@ApiModelProperty(value = "리뷰 정보", required = true)
val review: ReviewResponseDto
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@file:Suppress("ktlint", "MatchingDeclarationName")

package com.restaurant.be.review.presentation.dto

import com.restaurant.be.review.presentation.dto.common.ReviewResponseDto
import io.swagger.v3.oas.annotations.media.Schema

data class GetMyReviewResponse(
@Schema(description = "리뷰 리스트")
val reviews: List<ReviewResponseDto>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@file:Suppress("ktlint", "MatchingDeclarationName")

package com.restaurant.be.review.presentation.dto

import com.restaurant.be.review.presentation.dto.common.ReviewResponseDto
import io.swagger.v3.oas.annotations.media.Schema

data class GetReviewResponse(
@Schema(description = "리뷰 리스트")
val reviews: List<ReviewResponseDto>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.restaurant.be.review.presentation.dto

import com.restaurant.be.review.presentation.dto.common.ReviewResponseDto
import io.swagger.annotations.ApiModelProperty
import io.swagger.v3.oas.annotations.media.Schema

data class LikeReviewRequest(
@ApiModelProperty(value = "리뷰 좋아요 여부", required = true)
val isLike: Boolean
)

data class LikeReviewResponse(
@Schema(description = "리뷰 정보")
val review: ReviewResponseDto
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.restaurant.be.review.presentation.dto

import com.restaurant.be.review.presentation.dto.common.ReviewRequestDto
import com.restaurant.be.review.presentation.dto.common.ReviewResponseDto
import io.swagger.annotations.ApiModelProperty
import io.swagger.v3.oas.annotations.media.Schema

data class UpdateReviewRequest(
@ApiModelProperty(value = "리뷰 정보", required = true)
val review: ReviewRequestDto
)

data class UpdateReviewResponse(
@Schema(description = "리뷰 정보")
val review: ReviewResponseDto
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.restaurant.be.review.presentation.dto.common

import io.swagger.v3.oas.annotations.media.Schema

data class ReviewRequestDto(
@Schema(description = "리뷰 id")
val id: Long,
@Schema(description = "유저 id")
val userId: Long,
@Schema(description = "식당 id")
val restaurantId: Long,
@Schema(description = "평가 점수")
val rating: Int,
@Schema(description = "리뷰 내용")
val comment: String,
@Schema(description = "이미지 url 리스트")
val imageUrls: List<String>,
@Schema(description = "좋아요 여부")
val isLike: Boolean
)

data class ReviewResponseDto(
@Schema(description = "유저 id")
val userId: Long,
@Schema(description = "식당 id")
val restaurantId: Long,
@Schema(description = "평가 점수")
val rating: Int,
@Schema(description = "리뷰 내용")
val comment: String,
@Schema(description = "이미지 url 리스트")
val imageUrls: List<String>,
@Schema(description = "좋아요 여부")
val isLike: Boolean
)

0 comments on commit 2add664

Please sign in to comment.