generated from pricelees/issue-pr-template
[#30] 코드 구조 개선 #31
@ -24,8 +24,9 @@ class ReservationWithPaymentService(
|
|||||||
request: ReservationCreateWithPaymentRequest,
|
request: ReservationCreateWithPaymentRequest,
|
||||||
paymentInfo: PaymentApproveResponse,
|
paymentInfo: PaymentApproveResponse,
|
||||||
memberId: Long,
|
memberId: Long,
|
||||||
): ReservationRetrieveResponse {
|
): ReservationCreateResponse {
|
||||||
log.info { "[ReservationWithPaymentService.createReservationAndPayment] 예약 & 결제 정보 저장 시작: memberId=$memberId, paymentInfo=$paymentInfo" }
|
log.info { "[ReservationWithPaymentService.createReservationAndPayment] 예약 & 결제 정보 저장 시작: memberId=$memberId, paymentInfo=$approvedPaymentInfo" }
|
||||||
|
|
||||||
val reservation: ReservationEntity = reservationService.createConfirmedReservation(request, memberId)
|
val reservation: ReservationEntity = reservationService.createConfirmedReservation(request, memberId)
|
||||||
|
|
||||||
return paymentService.createPayment(paymentInfo, reservation)
|
return paymentService.createPayment(paymentInfo, reservation)
|
||||||
|
|||||||
@ -74,7 +74,7 @@ interface ReservationAPI {
|
|||||||
fun createReservationWithPayment(
|
fun createReservationWithPayment(
|
||||||
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long
|
@MemberId @Parameter(hidden = true) memberId: Long
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>>
|
): ResponseEntity<CommonApiResponse<ReservationCreateResponse>>
|
||||||
|
|
||||||
@Admin
|
@Admin
|
||||||
@Operation(summary = "관리자 예약 추가", tags = ["관리자 로그인이 필요한 API"])
|
@Operation(summary = "관리자 예약 추가", tags = ["관리자 로그인이 필요한 API"])
|
||||||
|
|||||||
@ -2,7 +2,10 @@ package roomescape.reservation.implement
|
|||||||
|
|
||||||
import io.github.oshai.kotlinlogging.KLogger
|
import io.github.oshai.kotlinlogging.KLogger
|
||||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||||
|
import org.springframework.data.repository.findByIdOrNull
|
||||||
import org.springframework.stereotype.Component
|
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.ReservationEntity
|
||||||
import roomescape.reservation.infrastructure.persistence.ReservationRepository
|
import roomescape.reservation.infrastructure.persistence.ReservationRepository
|
||||||
import roomescape.theme.infrastructure.persistence.ThemeEntity
|
import roomescape.theme.infrastructure.persistence.ThemeEntity
|
||||||
@ -15,6 +18,16 @@ private val log: KLogger = KotlinLogging.logger {}
|
|||||||
class ReservationFinder(
|
class ReservationFinder(
|
||||||
private val reservationRepository: ReservationRepository
|
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 {
|
fun isTimeReserved(time: TimeEntity): Boolean {
|
||||||
log.debug { "[ReservationFinder.isTimeReserved] 시작: timeId=${time.id}, startAt=${time.startAt}" }
|
log.debug { "[ReservationFinder.isTimeReserved] 시작: timeId=${time.id}, startAt=${time.startAt}" }
|
||||||
|
|||||||
@ -79,19 +79,19 @@ class ReservationController(
|
|||||||
override fun createReservationWithPayment(
|
override fun createReservationWithPayment(
|
||||||
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
@Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest,
|
||||||
@MemberId @Parameter(hidden = true) memberId: Long
|
@MemberId @Parameter(hidden = true) memberId: Long
|
||||||
): ResponseEntity<CommonApiResponse<ReservationRetrieveResponse>> {
|
): ResponseEntity<CommonApiResponse<ReservationCreateResponse>> {
|
||||||
val paymentRequest: PaymentApproveRequest = reservationCreateWithPaymentRequest.toPaymentApproveRequest()
|
val paymentRequest: PaymentApproveRequest = reservationCreateWithPaymentRequest.toPaymentApproveRequest()
|
||||||
val paymentResponse: PaymentApproveResponse = paymentClient.confirm(paymentRequest)
|
val paymentResponse: PaymentApproveResponse = paymentClient.confirm(paymentRequest)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val reservationRetrieveResponse: ReservationRetrieveResponse =
|
val response: ReservationCreateResponse =
|
||||||
reservationWithPaymentService.createReservationAndPayment(
|
reservationWithPaymentService.createReservationAndPayment(
|
||||||
reservationCreateWithPaymentRequest,
|
reservationCreateWithPaymentRequest,
|
||||||
paymentResponse,
|
paymentResponse,
|
||||||
memberId
|
memberId
|
||||||
)
|
)
|
||||||
return ResponseEntity.created(URI.create("/reservations/${reservationRetrieveResponse.id}"))
|
return ResponseEntity.created(URI.create("/reservations/${response.id}"))
|
||||||
.body(CommonApiResponse(reservationRetrieveResponse))
|
.body(CommonApiResponse(response))
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
val cancelRequest = PaymentCancelRequest(
|
val cancelRequest = PaymentCancelRequest(
|
||||||
paymentRequest.paymentKey,
|
paymentRequest.paymentKey,
|
||||||
|
|||||||
@ -13,6 +13,31 @@ import roomescape.time.web.toCreateResponse
|
|||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.time.LocalTime
|
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(
|
data class MyReservationRetrieveResponse(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val themeName: String,
|
val themeName: String,
|
||||||
@ -36,13 +61,13 @@ data class ReservationRetrieveResponse(
|
|||||||
val id: Long,
|
val id: Long,
|
||||||
val date: LocalDate,
|
val date: LocalDate,
|
||||||
|
|
||||||
@field:JsonProperty("member")
|
@JsonProperty("member")
|
||||||
val member: MemberRetrieveResponse,
|
val member: MemberRetrieveResponse,
|
||||||
|
|
||||||
@field:JsonProperty("time")
|
@JsonProperty("time")
|
||||||
val time: TimeCreateResponse,
|
val time: TimeCreateResponse,
|
||||||
|
|
||||||
@field:JsonProperty("theme")
|
@JsonProperty("theme")
|
||||||
val theme: ThemeRetrieveResponse,
|
val theme: ThemeRetrieveResponse,
|
||||||
|
|
||||||
val status: ReservationStatus
|
val status: ReservationStatus
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user