From 52a6abef79b941cd8c459eca8032c6d8bec8bd83 Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 5 Aug 2025 21:45:21 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=98=88=EC=95=BD=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EC=99=80=20=EA=B0=99=EC=9D=80=20payload=EB=A5=BC=20?= =?UTF-8?q?=EA=B0=80=EC=A7=84=20=EC=98=88=EC=95=BD=20=EC=84=B1=EA=B3=B5=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20DTO=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/ReservationWithPaymentService.kt | 5 +-- .../reservation/docs/ReservationAPI.kt | 2 +- .../implement/ReservationFinder.kt | 13 ++++++++ .../reservation/web/ReservationController.kt | 8 ++--- .../reservation/web/ReservationResponse.kt | 31 +++++++++++++++++-- 5 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt b/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt index ed260498..03151e88 100644 --- a/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt +++ b/src/main/kotlin/roomescape/reservation/business/ReservationWithPaymentService.kt @@ -24,8 +24,9 @@ class ReservationWithPaymentService( request: ReservationCreateWithPaymentRequest, paymentInfo: PaymentApproveResponse, memberId: Long, - ): ReservationRetrieveResponse { - log.info { "[ReservationWithPaymentService.createReservationAndPayment] 예약 & 결제 정보 저장 시작: memberId=$memberId, paymentInfo=$paymentInfo" } + ): ReservationCreateResponse { + log.info { "[ReservationWithPaymentService.createReservationAndPayment] 예약 & 결제 정보 저장 시작: memberId=$memberId, paymentInfo=$approvedPaymentInfo" } + val reservation: ReservationEntity = reservationService.createConfirmedReservation(request, memberId) return paymentService.createPayment(paymentInfo, reservation) diff --git a/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt b/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt index d8187401..a2762c96 100644 --- a/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt +++ b/src/main/kotlin/roomescape/reservation/docs/ReservationAPI.kt @@ -74,7 +74,7 @@ interface ReservationAPI { fun createReservationWithPayment( @Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest, @MemberId @Parameter(hidden = true) memberId: Long - ): ResponseEntity> + ): ResponseEntity> @Admin @Operation(summary = "관리자 예약 추가", tags = ["관리자 로그인이 필요한 API"]) diff --git a/src/main/kotlin/roomescape/reservation/implement/ReservationFinder.kt b/src/main/kotlin/roomescape/reservation/implement/ReservationFinder.kt index 5b1a6aaf..35fcd725 100644 --- a/src/main/kotlin/roomescape/reservation/implement/ReservationFinder.kt +++ b/src/main/kotlin/roomescape/reservation/implement/ReservationFinder.kt @@ -2,7 +2,10 @@ package roomescape.reservation.implement import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Component +import roomescape.reservation.exception.ReservationErrorCode +import roomescape.reservation.exception.ReservationException import roomescape.reservation.infrastructure.persistence.ReservationEntity import roomescape.reservation.infrastructure.persistence.ReservationRepository import roomescape.theme.infrastructure.persistence.ThemeEntity @@ -15,6 +18,16 @@ private val log: KLogger = KotlinLogging.logger {} class ReservationFinder( private val reservationRepository: ReservationRepository ) { + fun findById(id: Long): ReservationEntity { + log.debug { "[ReservationFinder.findById] 시작: id=$id" } + + return reservationRepository.findByIdOrNull(id) + ?.also { log.debug { "[ReservationFinder.findById] 완료: reservationId=$id, date:${it.date}, timeId:${it.time.id}, themeId:${it.theme.id}" } } + ?: run { + log.warn { "[ReservationFinder.findById] 조회 실패: reservationId=$id" } + throw ReservationException(ReservationErrorCode.RESERVATION_NOT_FOUND) + } + } fun isTimeReserved(time: TimeEntity): Boolean { log.debug { "[ReservationFinder.isTimeReserved] 시작: timeId=${time.id}, startAt=${time.startAt}" } diff --git a/src/main/kotlin/roomescape/reservation/web/ReservationController.kt b/src/main/kotlin/roomescape/reservation/web/ReservationController.kt index fcd0565e..6c4d5b74 100644 --- a/src/main/kotlin/roomescape/reservation/web/ReservationController.kt +++ b/src/main/kotlin/roomescape/reservation/web/ReservationController.kt @@ -79,19 +79,19 @@ class ReservationController( override fun createReservationWithPayment( @Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest, @MemberId @Parameter(hidden = true) memberId: Long - ): ResponseEntity> { + ): ResponseEntity> { val paymentRequest: PaymentApproveRequest = reservationCreateWithPaymentRequest.toPaymentApproveRequest() val paymentResponse: PaymentApproveResponse = paymentClient.confirm(paymentRequest) try { - val reservationRetrieveResponse: ReservationRetrieveResponse = + val response: ReservationCreateResponse = reservationWithPaymentService.createReservationAndPayment( reservationCreateWithPaymentRequest, paymentResponse, memberId ) - return ResponseEntity.created(URI.create("/reservations/${reservationRetrieveResponse.id}")) - .body(CommonApiResponse(reservationRetrieveResponse)) + return ResponseEntity.created(URI.create("/reservations/${response.id}")) + .body(CommonApiResponse(response)) } catch (e: Exception) { val cancelRequest = PaymentCancelRequest( paymentRequest.paymentKey, diff --git a/src/main/kotlin/roomescape/reservation/web/ReservationResponse.kt b/src/main/kotlin/roomescape/reservation/web/ReservationResponse.kt index adbbfe6c..0e13e670 100644 --- a/src/main/kotlin/roomescape/reservation/web/ReservationResponse.kt +++ b/src/main/kotlin/roomescape/reservation/web/ReservationResponse.kt @@ -13,6 +13,31 @@ import roomescape.time.web.toCreateResponse import java.time.LocalDate import java.time.LocalTime +data class ReservationCreateResponse( + val id: Long, + val date: LocalDate, + + @JsonProperty("member") + val member: MemberRetrieveResponse, + + @JsonProperty("time") + val time: TimeCreateResponse, + + @JsonProperty("theme") + val theme: ThemeRetrieveResponse, + + val status: ReservationStatus +) + +fun ReservationEntity.toCreateResponse() = ReservationCreateResponse( + id = this.id!!, + date = this.date, + member = this.member.toRetrieveResponse(), + time = this.time.toCreateResponse(), + theme = this.theme.toRetrieveResponse(), + status = this.status +) + data class MyReservationRetrieveResponse( val id: Long, val themeName: String, @@ -36,13 +61,13 @@ data class ReservationRetrieveResponse( val id: Long, val date: LocalDate, - @field:JsonProperty("member") + @JsonProperty("member") val member: MemberRetrieveResponse, - @field:JsonProperty("time") + @JsonProperty("time") val time: TimeCreateResponse, - @field:JsonProperty("theme") + @JsonProperty("theme") val theme: ThemeRetrieveResponse, val status: ReservationStatus