Skip to content

Commit

Permalink
[KAN-30] 음식점 api url, dto 설계
Browse files Browse the repository at this point in the history
  • Loading branch information
sinkyoungdeok committed Apr 30, 2024
1 parent 56c2225 commit 12ce7b9
Show file tree
Hide file tree
Showing 12 changed files with 351 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.restaurant.be.restaurant.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.restaurant.presentation.dto.GetCategoryResponse
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

@Api(tags = ["02. Restaurant Info"], description = "음식점 서비스")
@RestController
@RequestMapping("/api/v1/restaurants/category")
class GetCategoryController {

@GetMapping
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "카테고리 전체 조회 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = GetCategoryResponse::class))]
)
fun getCategory(): CommonResponse<GetCategoryResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.restaurant.be.restaurant.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.restaurant.presentation.dto.GetKingoPassResponse
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 = ["02. Restaurant Info"], description = "음식점 서비스")
@RestController
@RequestMapping("/v1/restaurants/kingo-pass")
class GetKingoPassController {

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

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.restaurant.presentation.dto.GetRestaurantRequest
import com.restaurant.be.restaurant.presentation.dto.GetRestaurantResponse
import com.restaurant.be.restaurant.presentation.dto.GetRestaurantsResponse
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.data.domain.Pageable
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.ModelAttribute
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 = ["02. Restaurant Info"], description = "음식점 서비스")
@RestController
@RequestMapping("/api/v1/restaurants")
class GetRestaurantController {

@GetMapping
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "음식점 조회 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = GetRestaurantsResponse::class))]
)
fun getRestaurants(
principal: Principal,
@ModelAttribute request: GetRestaurantRequest,
pageable: Pageable
): CommonResponse<GetRestaurantsResponse> {
return CommonResponse.success()
}

@GetMapping("/{restaurantId}")
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "음식점 상세 조회 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = GetRestaurantResponse::class))]
)
fun getRestaurant(
principal: Principal,
@PathVariable restaurantId: String
): CommonResponse<GetRestaurantResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.restaurant.be.restaurant.presentation.controller

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.restaurant.presentation.dto.GetLikeRestaurantsResponse
import com.restaurant.be.restaurant.presentation.dto.LikeRestaurantRequest
import com.restaurant.be.restaurant.presentation.dto.LikeRestaurantResponse
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.data.domain.Pageable
import org.springframework.security.access.prepost.PreAuthorize
import org.springframework.web.bind.annotation.GetMapping
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 = ["02. Restaurant Info"], description = "음식점 서비스")
@RestController
@RequestMapping("/api/v1/restaurants")
class LikeRestaurantController {

@GetMapping("/like")
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "좋아요한 음식점 리스트 조회 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = GetLikeRestaurantsResponse::class))]
)
fun getLikeRestaurants(
principal: Principal,
pageable: Pageable
): CommonResponse<GetLikeRestaurantsResponse> {
return CommonResponse.success()
}

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

import com.restaurant.be.common.response.CommonResponse
import com.restaurant.be.restaurant.presentation.dto.RecommendRestaurantResponse
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 = ["02. Restaurant Info"], description = "음식점 서비스")
@RestController
@RequestMapping("/api/v1/restaurants")
class RecommendRestaurantController {

@GetMapping("recommend")
@PreAuthorize("hasRole('USER')")
@ApiOperation(value = "gpt 기반 추천 음식점 리스트 조회 API")
@ApiResponse(
responseCode = "200",
description = "성공",
content = [Content(schema = Schema(implementation = RecommendRestaurantResponse::class))]
)
fun getRecommendRestaurants(
principal: Principal
): CommonResponse<RecommendRestaurantResponse> {
return CommonResponse.success()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@file:Suppress("ktlint", "MatchingDeclarationName")

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

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

data class GetCategoryResponse(
@Schema(description = "카테고리 리스트")
val categories: List<CategoryDto>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@file:Suppress("ktlint", "MatchingDeclarationName")

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

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

data class GetKingoPassResponse(
@Schema(description = "킹고패스 식당 리스트")
val restaurants: List<RestaurantDto>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.restaurant.be.restaurant.presentation.dto

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

data class GetRestaurantRequest(
@ApiModelProperty(value = "식당 이름 검색", example = "맛집", required = false)
val query: String,
@ApiModelProperty(value = "카테고리 필터", example = "[1, 2, 3]", required = false)
val categoryIds: List<Long>,
@ApiModelProperty(value = "킹고패스 할인 여부 필터", example = "false", required = false)
val discountForSkku: Boolean,
@ApiModelProperty(value = "평점 필터", example = "4.5", required = false)
val rating: Long,
@ApiModelProperty(value = "리뷰 개수 필터", example = "100", required = false)
val reviewCount: Long
)

data class GetRestaurantsResponse(
@Schema(description = "식당 리스트")
val restaurants: List<RestaurantDto>
)

data class GetRestaurantResponse(
@Schema(description = "식당 정보")
val restaurant: RestaurantDto
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.restaurant.be.restaurant.presentation.dto

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

data class GetLikeRestaurantsResponse(
@Schema(description = "좋아요한 식당 리스트")
val restaurants: List<RestaurantDto>
)

data class LikeRestaurantRequest(
@ApiModelProperty(value = "현재 좋아요 했는지 여부", example = "LIKE", required = true)
val status: LikeRestaurantStatus
)
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,11 @@
@file:Suppress("ktlint", "MatchingDeclarationName")

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

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

data class RecommendRestaurantResponse(
@Schema(description = "gpt기반 추천 식당 리스트")
val restaurants: List<RestaurantDto>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.restaurant.be.restaurant.presentation.dto.common

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

data class CategoryDto(
@Schema(description = "카테고리 id")
val id: Long,
@Schema(description = "카테고리 이름")
val name: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.restaurant.be.restaurant.presentation.dto.common

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

data class RestaurantDto(
@Schema(description = "식당 id")
val id: Long,
@Schema(description = "식당 대표 이미지 URL")
val representativeImageUrl: String,
@Schema(description = "식당 이름")
val name: String,
@Schema(description = "식당 평점 평균")
val ratingAvg: Double,
@Schema(description = "식당 리뷰 수")
val reviewCount: Long,
@Schema(description = "식당 좋아요 수")
val likeCount: Long,
@Schema(description = "식당 카테고리")
val category: String,
@Schema(description = "식당 대표 메뉴")
val representativeMenu: String,
@Schema(description = "식당 영업 시작 시간")
val operatingStartTime: String,
@Schema(description = "식당 영업 종료 시간")
val operatingEndTime: String,
@Schema(description = "식당 대표 리뷰 내용")
val representativeReviewContent: String,
@Schema(description = "식당 좋아요 여부(로그인한 유저)")
val isLike: Boolean,
@Schema(description = "식당 할인 여부")
val isDiscountForSkku: Boolean,
@Schema(description = "식당 할인 내용")
val discountContent: String,

@Schema(description = "식당 상세 정보")
val detailInfo: RestaurantDetailDto
)

data class RestaurantDetailDto(
@Schema(description = "식당 전화번호")
val contactNumber: String,
@Schema(description = "식당 주소")
val address: String
)

0 comments on commit 12ce7b9

Please sign in to comment.