Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
meengi07 committed Oct 12, 2024
2 parents 400455a + c27d67c commit b72e112
Show file tree
Hide file tree
Showing 15 changed files with 63 additions and 88 deletions.
7 changes: 4 additions & 3 deletions scripts/after-deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ REPOSITORY=/home/ec2-user

cd $REPOSITORY/o2o-backend

#echo "> 🔵 Stop & Remove docker services."
#cd ..
#docker compose down
echo "> 🔵 Remove docker services."
docker system prune --all -f



echo "> 🟢 Run new docker services."
sudo docker load -i o2o-backend.tar.gz
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package org.inner.circle.o2oserver.order.infrastructure.repository

import org.bson.types.ObjectId
import org.springframework.data.mongodb.repository.MongoRepository
import org.springframework.data.mongodb.repository.Query
import org.springframework.stereotype.Repository

@Repository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,14 @@ class OrderCreateRequest {
data class OrderCreate(
@field:NotNull(message = "스토어 ID는 필수입니다.")
val storeId: Long,

@field:NotBlank(message = "스토어 이름은 필수입니다.")
val storeName: String,

@field:NotEmpty(message = "메뉴는 비어 있을 수 없습니다.")
val menus: List<MenuCreate>,

@field:Min(value = 0, message = "주문 금액은 0 이상이어야 합니다.")
val orderPrice: Long,

@field:Pattern(regexp = "CARD", message = "주문방식은 CARD만 가능합니다.")
val payment: String? = "CARD",

@field:Valid
val address: AddressCreate,
) {
Expand Down Expand Up @@ -77,58 +72,45 @@ class OrderCreateRequest {
data class MenuCreate(
@field:NotNull(message = "메뉴 ID는 필수입니다.")
val menuId: Long,

@field:NotBlank(message = "메뉴명은 필수입니다.")
val menuName: String,

@field:Min(value = 1, message = "메뉴 개수는 1 이상이어야 합니다.")
val menuCount: Int,

@field:Min(value = 0, message = "메뉴 금액은 0 이상이어야 합니다.")
val menuPrice: Long,

@field:NotEmpty(message = "옵션 그룹은 비어 있을 수 없습니다.")
val optionGroups: List<OptionGroupCreate>,
)

data class OptionGroupCreate(
@field:NotNull(message = "옵션 그룹 ID는 필수입니다.")
val optionGroupId: Long,

@field:NotBlank(message = "옵션 그룹 이름은 필수입니다.")
val optionGroupName: String,

@field:NotEmpty(message = "옵션은 비어 있을 수 없습니다.")
val options: List<OptionCreate>,
)

data class OptionCreate(
@field:NotNull(message = "옵션 상세 ID는 필수입니다.")
val optionId: Long,

@field:NotBlank(message = "옵션 상세 이름은 필수입니다.")
val optionName: String,

@field:Min(value = 0, message = "옵션 가격은 0 이상이어야 합니다.")
val optionPrice: Long,
)

data class AddressCreate(
@field:NotNull(message = "주소 ID는 필수입니다.")
val addressId: Long,

@field:NotBlank(message = "주소는 필수입니다.")
val address: String,

@field:NotBlank(message = "상세 주소는 필수입니다.")
val addressDetail: String,

@field:NotBlank(message = "우편번호는 필수입니다.")
val zipCode: String,

@field:DecimalMin(value = "0.0", message = "위도는 0.0 이상이어야 합니다.")
val latitude: Double,

@field:DecimalMin(value = "0.0", message = "경도는 0.0 이상이어야 합니다.")
val longitude: Double,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class OrderReviewRequest {
data class ReviewCreate(
@field:NotBlank(message = "리뷰 내용은 필수입니다.")
val content: String,

@field:Min(value = 0, message = "평점은 0 이상이어야 합니다.")
@field:Max(value = 5, message = "평점은 5 이하이어야 합니다.")
val rating: Double,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package org.inner.circle.o2oserver.store.application

import org.inner.circle.o2oserver.store.domain.review.ReviewInfo
import org.inner.circle.o2oserver.store.domain.review.ReviewQueryObject
import org.inner.circle.o2oserver.store.domain.review.ReviewService
import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Service

@Service
class ReviewFacade(
private val reviewService: ReviewService,
) {
fun getStoreReviewList(queryObject: ReviewQueryObject): List<ReviewInfo> {
return reviewService.getStoreReviewList(queryObject)
fun getStoreReviewList(storeId: Long, pageable: Pageable): List<ReviewInfo> {
return reviewService.getStoreReviewList(storeId, pageable)
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.inner.circle.o2oserver.store.domain.review

import java.time.LocalDateTime

class ReviewInfo(
review: Review,
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.inner.circle.o2oserver.store.domain.review

import org.springframework.data.domain.Pageable

interface ReviewReader {
fun getStoreReviewList(queryObject: ReviewQueryObject): List<Review>
fun getStoreReviewList(storeId: Long, pageable: Pageable): List<Review>
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.inner.circle.o2oserver.store.domain.review

import org.springframework.data.domain.Pageable

interface ReviewService {
fun getStoreReviewList(queryObject: ReviewQueryObject): List<ReviewInfo>
fun getStoreReviewList(storeId: Long, pageable: Pageable): List<ReviewInfo>
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package org.inner.circle.o2oserver.store.domain.review

import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Service

@Service
class ReviewServiceImpl(private val reviewReader: ReviewReader) : ReviewService {
override fun getStoreReviewList(queryObject: ReviewQueryObject): List<ReviewInfo> {
val reviews = reviewReader.getStoreReviewList(queryObject)
override fun getStoreReviewList(storeId: Long, pageable: Pageable): List<ReviewInfo> {
val reviews = reviewReader.getStoreReviewList(storeId, pageable)
return reviews.map { ReviewInfo(it) }
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.inner.circle.o2oserver.store.domain.store.command

import org.inner.circle.o2oserver.store.domain.Address
import org.springframework.data.domain.Pageable

class StoreListCommand(
val address: Address,
val longitude: Double,
val latitude: Double,
val category: String?,
val keyword: String,
val page: Int,
val size: Int,
val pageable: Pageable,
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import org.springframework.stereotype.Component

@Component
class ReviewApiClient {
fun getStoreReviewList(storeId: Int, page: Int, size: Int): ReviewResponseDto {
fun getStoreReviewList(storeId: Long, page: Int, size: Int): ReviewResponseDto {
val reviews =
listOf(
ReviewListResponseDto(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package org.inner.circle.o2oserver.store.infrastructure.client

import org.inner.circle.o2oserver.store.domain.review.Review
import org.inner.circle.o2oserver.store.domain.review.ReviewQueryObject
import org.inner.circle.o2oserver.store.domain.review.ReviewReader
import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Component

@Component
class ReviewReaderImpl(private val reviewApiClient: ReviewApiClient) : ReviewReader {
override fun getStoreReviewList(queryObject: ReviewQueryObject): List<Review> {
val response = reviewApiClient.getStoreReviewList(queryObject.storeId, queryObject.page, queryObject.limit)
override fun getStoreReviewList(storeId: Long, pageable: Pageable): List<Review> {
val response = reviewApiClient.getStoreReviewList(storeId, pageable.pageNumber, pageable.pageSize)
return response.reviews.map { it.toDomain() }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import org.inner.circle.o2oserver.store.domain.store.StoreListInfo
import org.inner.circle.o2oserver.store.domain.store.StoreReader
import org.inner.circle.o2oserver.store.domain.store.command.StoreListCommand
import org.inner.circle.o2oserver.store.infrastructure.repository.mongo.MongoRepository
import org.springframework.data.domain.PageRequest
import org.springframework.data.geo.Distance
import org.springframework.data.geo.Metrics
import org.springframework.data.geo.Point
Expand Down Expand Up @@ -92,13 +91,12 @@ class StoreReadImpl(private val storeApiClient: StoreApiClient, private val mong
}

override fun getStoreListWithLocationAndName(command: StoreListCommand): StoreListInfo {
val pageable = PageRequest.of(command.page, command.size)
val pageable = command.pageable
val keyword = command.keyword

val keyword = command.keyword ?: ""
val (latitude, longitude) = command.address

val point = Point(longitude, latitude)
val point = Point(command.longitude, command.latitude)
val distance = Distance(5.0, Metrics.KILOMETERS)

val mongo = mongoRepository.findByStoreNameContainingAndLocationNear(keyword, point, distance, pageable)

return StoreListInfo(totalCount = mongo.totalElements, stores = mongo.content.map { it.toDomain() })
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package org.inner.circle.o2oserver.store.presentation.api

import jakarta.validation.Valid
import org.inner.circle.o2oserver.store.application.ReviewFacade
import org.inner.circle.o2oserver.store.application.StoreFacade
import org.inner.circle.o2oserver.store.domain.review.ReviewQueryObject
import org.inner.circle.o2oserver.store.domain.store.command.StoreListCommand
import org.inner.circle.o2oserver.store.presentation.dto.CommonListResponse
import org.inner.circle.o2oserver.store.presentation.dto.CommonResponse
import org.inner.circle.o2oserver.store.presentation.dto.StoreListRequest
import org.inner.circle.o2oserver.store.presentation.dto.StoreReviewDTO
import org.springframework.data.domain.Pageable
import org.springframework.data.web.PageableDefault
import org.springframework.validation.BindingResult
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.RequestParam
import org.springframework.web.bind.annotation.RestController

@RestController
Expand All @@ -24,30 +25,26 @@ class StoreController(
) {
@GetMapping("/{storeId}")
fun getStoreDetail(
@PathVariable storeId: Long,
@PathVariable @Valid storeId: Long,
): CommonResponse {
val store = storeFacade.getStoreDetail(storeId)
return CommonResponse(response = store, msg = "조회 되었습니다", statusCode = 200)
}

@PostMapping("")
fun getStoreDetail(
@RequestBody request: StoreListRequest,
fun storeList(
@Valid @RequestBody request: StoreListRequest,
bindingResult: BindingResult,
): CommonListResponse {
val command =
StoreListCommand(
address = request.address.toDomain(),
category = request.category,
keyword = request.keyword,
page = request.page,
size = request.size,
)

if (bindingResult.hasErrors()) {
throw RuntimeException(bindingResult.fieldErrors.joinToString { el -> el.defaultMessage.toString() })
}
val command = request.toCommand()
val storeListInfo = storeFacade.getStoreList(command)
return CommonListResponse(
response = storeListInfo.stores,
totalCount = storeListInfo.totalCount,
size = request.size ?: 0,
size = request.size,
page = request.page,
statusCode = 200,
msg = "음식점 목록을 조회했습니다.",
Expand All @@ -56,27 +53,19 @@ class StoreController(

@GetMapping("/{storeId}/reviews")
fun getStoreDetail(
@PathVariable("storeId") storeId: Int,
@RequestParam("page") page: Int,
@RequestParam("limit") size: Int?,
@PathVariable("storeId") storeId: Long,
@PageableDefault(size = 10, page = 0) pageable: Pageable,
): CommonListResponse {
val queryObject =
ReviewQueryObject(
storeId = storeId,
page = page,
limit = size?: 10,
)

val reviews = reviewFacade.getStoreReviewList(queryObject)
val reviews = reviewFacade.getStoreReviewList(storeId, pageable)
return CommonListResponse(
response =
StoreReviewDTO(
reviews = reviews,
storeName = "임시 가게 이름",
),
totalCount = 100,
size = size ?: 10,
page = page,
size = pageable.pageSize,
page = pageable.pageNumber,
statusCode = 200,
msg = "목록을 조회했습니다.",
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package org.inner.circle.o2oserver.store.presentation.dto

import org.inner.circle.o2oserver.store.domain.Address
import jakarta.validation.constraints.Max
import jakarta.validation.constraints.Positive
import org.inner.circle.o2oserver.store.domain.review.ReviewInfo
import org.inner.circle.o2oserver.store.domain.store.command.StoreListCommand
import org.springframework.data.domain.PageRequest

data class CommonResponse(
val response: Any,
Expand All @@ -19,22 +22,23 @@ data class CommonListResponse(
)

data class StoreListRequest(
val address: AddressDTO,
@field:Positive(message = "위도 값을 다시 확인해주세요") @Max(value = 39, message = "위도 값을 다시 확인해주세요")
val latitude: Double,
@field:Positive(message = "경도 값을 다시 확인해주세요") @Max(value = 129, message = "경도 값을 다시 확인해주세요")
val longitude: Double,
val category: String?,
val page: Int = 1,
val page: Int = 0,
val size: Int = 10,
val keyword: String = "",
)

data class AddressDTO(
val latitude: Double,
val longitude: Double,
val address: String,
val addressDetail: String?,
val zipCode: String,
) {
fun toDomain(): Address {
return Address(latitude, longitude, address, addressDetail, zipCode)
fun toCommand(): StoreListCommand {
return StoreListCommand(
pageable = PageRequest.of(page, size),
longitude = longitude,
latitude = latitude,
category = category,
keyword = keyword,
)
}
}

Expand Down

0 comments on commit b72e112

Please sign in to comment.