diff --git a/src/main/java/roomescape/payment/business/PaymentService.kt b/src/main/java/roomescape/payment/business/PaymentService.kt index 4f198db3..0b9093c9 100644 --- a/src/main/java/roomescape/payment/business/PaymentService.kt +++ b/src/main/java/roomescape/payment/business/PaymentService.kt @@ -29,7 +29,7 @@ class PaymentService( ): PaymentCreateResponse = PaymentEntity( orderId = paymentResponse.orderId, paymentKey = paymentResponse.paymentKey, - totalAmount = paymentResponse.amount, + totalAmount = paymentResponse.totalAmount, reservation = reservation, approvedAt = paymentResponse.approvedAt ).also { diff --git a/src/main/java/roomescape/payment/web/PaymentDTO.kt b/src/main/java/roomescape/payment/web/PaymentDTO.kt index 7c2b8a43..85bd5ec2 100644 --- a/src/main/java/roomescape/payment/web/PaymentDTO.kt +++ b/src/main/java/roomescape/payment/web/PaymentDTO.kt @@ -3,8 +3,8 @@ package roomescape.payment.web import com.fasterxml.jackson.databind.annotation.JsonDeserialize import roomescape.payment.infrastructure.client.PaymentCancelResponseDeserializer import roomescape.payment.infrastructure.persistence.PaymentEntity -import roomescape.reservation.web.ReservationResponse -import roomescape.reservation.web.toCreateResponse +import roomescape.reservation.web.ReservationRetrieveResponse +import roomescape.reservation.web.toRetrieveResponse import java.time.OffsetDateTime data class PaymentCancelRequest( @@ -26,7 +26,7 @@ data class PaymentCreateResponse( val orderId: String, val paymentKey: String, val totalAmount: Long, - val reservation: ReservationResponse, + val reservation: ReservationRetrieveResponse, val approvedAt: OffsetDateTime ) @@ -35,6 +35,6 @@ fun PaymentEntity.toCreateResponse(): PaymentCreateResponse = PaymentCreateRespo orderId = this.orderId, paymentKey = this.paymentKey, totalAmount = this.totalAmount, - reservation = this.reservation.toCreateResponse(), + reservation = this.reservation.toRetrieveResponse(), approvedAt = this.approvedAt ) \ No newline at end of file diff --git a/src/main/java/roomescape/reservation/business/ReservationService.kt b/src/main/java/roomescape/reservation/business/ReservationService.kt index 6004d86f..efc7c950 100644 --- a/src/main/java/roomescape/reservation/business/ReservationService.kt +++ b/src/main/java/roomescape/reservation/business/ReservationService.kt @@ -24,26 +24,26 @@ class ReservationService( ) { @Transactional(readOnly = true) - fun findAllReservations(): ReservationsResponse { + fun findAllReservations(): ReservationRetrieveListResponse { val spec: Specification = ReservationSearchSpecification() .confirmed() .build() - return ReservationsResponse(findAllReservationByStatus(spec)) + return ReservationRetrieveListResponse(findAllReservationByStatus(spec)) } @Transactional(readOnly = true) - fun findAllWaiting(): ReservationsResponse { + fun findAllWaiting(): ReservationRetrieveListResponse { val spec: Specification = ReservationSearchSpecification() .waiting() .build() - return ReservationsResponse(findAllReservationByStatus(spec)) + return ReservationRetrieveListResponse(findAllReservationByStatus(spec)) } - private fun findAllReservationByStatus(spec: Specification): List { - return reservationRepository.findAll(spec).map { it.toCreateResponse() } + private fun findAllReservationByStatus(spec: Specification): List { + return reservationRepository.findAll(spec).map { it.toRetrieveResponse() } } fun removeReservationById(reservationId: Long, memberId: Long) { @@ -51,7 +51,7 @@ class ReservationService( reservationRepository.deleteById(reservationId) } - fun addReservation(request: ReservationRequest, memberId: Long): ReservationEntity { + fun addReservation(request: ReservationCreateWithPaymentRequest, memberId: Long): ReservationEntity { validateIsReservationExist(request.themeId, request.timeId, request.date) return getReservationForSave( request.timeId, @@ -64,7 +64,7 @@ class ReservationService( } } - fun addReservationByAdmin(request: AdminReservationRequest): ReservationResponse { + fun addReservationByAdmin(request: AdminReservationCreateRequest): ReservationRetrieveResponse { validateIsReservationExist(request.themeId, request.timeId, request.date) return addReservationWithoutPayment( @@ -76,7 +76,7 @@ class ReservationService( ) } - fun addWaiting(request: WaitingRequest, memberId: Long): ReservationResponse { + fun addWaiting(request: WaitingCreateRequest, memberId: Long): ReservationRetrieveResponse { validateMemberAlreadyReserve(request.themeId, request.timeId, request.date, memberId) return addReservationWithoutPayment( request.themeId, @@ -93,10 +93,10 @@ class ReservationService( date: LocalDate, memberId: Long, status: ReservationStatus - ): ReservationResponse = getReservationForSave(timeId, themeId, date, memberId, status) + ): ReservationRetrieveResponse = getReservationForSave(timeId, themeId, date, memberId, status) .also { reservationRepository.save(it) - }.toCreateResponse() + }.toRetrieveResponse() private fun validateMemberAlreadyReserve(themeId: Long?, timeId: Long?, date: LocalDate?, memberId: Long?) { @@ -169,7 +169,7 @@ class ReservationService( memberId: Long?, dateFrom: LocalDate?, dateTo: LocalDate? - ): ReservationsResponse { + ): ReservationRetrieveListResponse { validateDateForSearch(dateFrom, dateTo) val spec: Specification = ReservationSearchSpecification() .confirmed() @@ -179,7 +179,7 @@ class ReservationService( .dateEndAt(dateTo) .build() - return ReservationsResponse(findAllReservationByStatus(spec)) + return ReservationRetrieveListResponse(findAllReservationByStatus(spec)) } private fun validateDateForSearch(startFrom: LocalDate?, endAt: LocalDate?) { @@ -195,8 +195,8 @@ class ReservationService( } @Transactional(readOnly = true) - fun findMemberReservations(memberId: Long): MyReservationsResponse { - return MyReservationsResponse(reservationRepository.findMyReservations(memberId)) + fun findMemberReservations(memberId: Long): MyReservationRetrieveListResponse { + return MyReservationRetrieveListResponse(reservationRepository.findMyReservations(memberId)) } fun approveWaiting(reservationId: Long, memberId: Long) { diff --git a/src/main/java/roomescape/reservation/business/ReservationWithPaymentService.kt b/src/main/java/roomescape/reservation/business/ReservationWithPaymentService.kt index 0210a576..5353285d 100644 --- a/src/main/java/roomescape/reservation/business/ReservationWithPaymentService.kt +++ b/src/main/java/roomescape/reservation/business/ReservationWithPaymentService.kt @@ -7,8 +7,8 @@ import roomescape.payment.infrastructure.client.PaymentApproveResponse import roomescape.payment.web.PaymentCancelRequest import roomescape.payment.web.PaymentCancelResponse import roomescape.reservation.infrastructure.persistence.ReservationEntity -import roomescape.reservation.web.ReservationRequest -import roomescape.reservation.web.ReservationResponse +import roomescape.reservation.web.ReservationCreateWithPaymentRequest +import roomescape.reservation.web.ReservationRetrieveResponse import java.time.OffsetDateTime @Service @@ -18,10 +18,10 @@ class ReservationWithPaymentService( private val paymentService: PaymentService ) { fun addReservationWithPayment( - request: ReservationRequest, + request: ReservationCreateWithPaymentRequest, paymentInfo: PaymentApproveResponse, memberId: Long - ): ReservationResponse { + ): ReservationRetrieveResponse { val reservation: ReservationEntity = reservationService.addReservation(request, memberId) return paymentService.createPayment(paymentInfo, reservation) diff --git a/src/main/java/roomescape/reservation/docs/ReservationAPI.kt b/src/main/java/roomescape/reservation/docs/ReservationAPI.kt index 05fe2883..ba82ee7b 100644 --- a/src/main/java/roomescape/reservation/docs/ReservationAPI.kt +++ b/src/main/java/roomescape/reservation/docs/ReservationAPI.kt @@ -26,14 +26,14 @@ interface ReservationAPI { @Admin @Operation(summary = "모든 예약 정보 조회", tags = ["관리자 로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun getAllReservations(): ResponseEntity> + fun getAllReservations(): ResponseEntity> @LoginRequired @Operation(summary = "자신의 예약 및 대기 조회", tags = ["로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) fun getMemberReservations( @MemberId @Parameter(hidden = true) memberId: Long - ): ResponseEntity> + ): ResponseEntity> @Admin @Operation(summary = "관리자의 예약 검색", description = "특정 조건에 해당되는 예약 검색", tags = ["관리자 로그인이 필요한 API"]) @@ -45,7 +45,7 @@ interface ReservationAPI { @RequestParam(required = false) memberId: Long?, @RequestParam(required = false) dateFrom: LocalDate?, @RequestParam(required = false) dateTo: LocalDate? - ): ResponseEntity> + ): ResponseEntity> @Admin @Operation(summary = "관리자의 예약 취소", tags = ["관리자 로그인이 필요한 API"]) @@ -68,9 +68,9 @@ interface ReservationAPI { ) ) fun saveReservation( - @Valid @RequestBody reservationRequest: ReservationRequest, + @Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest, @MemberId @Parameter(hidden = true) memberId: Long - ): ResponseEntity> + ): ResponseEntity> @Admin @Operation(summary = "관리자 예약 추가", tags = ["관리자 로그인이 필요한 API"]) @@ -83,13 +83,13 @@ interface ReservationAPI { ) ) fun saveReservationByAdmin( - @Valid @RequestBody adminReservationRequest: AdminReservationRequest, - ): ResponseEntity> + @Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest, + ): ResponseEntity> @Admin @Operation(summary = "모든 예약 대기 조회", tags = ["관리자 로그인이 필요한 API"]) @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun getAllWaiting(): ResponseEntity> + fun getAllWaiting(): ResponseEntity> @LoginRequired @Operation(summary = "예약 대기 신청", tags = ["로그인이 필요한 API"]) @@ -102,9 +102,9 @@ interface ReservationAPI { ) ) fun saveWaiting( - @Valid @RequestBody waitingRequest: WaitingRequest, + @Valid @RequestBody waitingCreateRequest: WaitingCreateRequest, @MemberId @Parameter(hidden = true) memberId: Long, - ): ResponseEntity> + ): ResponseEntity> @LoginRequired @Operation(summary = "예약 대기 취소", tags = ["로그인이 필요한 API"]) diff --git a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt index 5f52afe5..68036ec8 100644 --- a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt +++ b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt @@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor import org.springframework.data.jpa.repository.Modifying import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.query.Param -import roomescape.reservation.web.MyReservationResponse +import roomescape.reservation.web.MyReservationRetrieveResponse import java.time.LocalDate interface ReservationRepository @@ -42,7 +42,7 @@ interface ReservationRepository fun isExistConfirmedReservation(@Param("id") reservationId: Long): Boolean @Query(""" - SELECT new roomescape.reservation.web.MyReservationResponse( + SELECT new roomescape.reservation.web.MyReservationRetrieveResponse( r.id, t.name, r.date, @@ -58,5 +58,5 @@ interface ReservationRepository ON p.reservation = r WHERE r.member.id = :memberId """) - fun findMyReservations(memberId: Long): List + fun findMyReservations(memberId: Long): List } diff --git a/src/main/java/roomescape/reservation/web/ReservationController.kt b/src/main/java/roomescape/reservation/web/ReservationController.kt index 492c8c80..81be3fc1 100644 --- a/src/main/java/roomescape/reservation/web/ReservationController.kt +++ b/src/main/java/roomescape/reservation/web/ReservationController.kt @@ -24,8 +24,8 @@ class ReservationController( private val paymentClient: TossPaymentClient ) : ReservationAPI { @GetMapping("/reservations") - override fun getAllReservations(): ResponseEntity> { - val response: ReservationsResponse = reservationService.findAllReservations() + override fun getAllReservations(): ResponseEntity> { + val response: ReservationRetrieveListResponse = reservationService.findAllReservations() return ResponseEntity.ok(CommonApiResponse(response)) } @@ -33,8 +33,8 @@ class ReservationController( @GetMapping("/reservations-mine") override fun getMemberReservations( @MemberId @Parameter(hidden = true) memberId: Long - ): ResponseEntity> { - val response: MyReservationsResponse = reservationService.findMemberReservations(memberId) + ): ResponseEntity> { + val response: MyReservationRetrieveListResponse = reservationService.findMemberReservations(memberId) return ResponseEntity.ok(CommonApiResponse(response)) } @@ -45,8 +45,8 @@ class ReservationController( @RequestParam(required = false) memberId: Long?, @RequestParam(required = false) dateFrom: LocalDate?, @RequestParam(required = false) dateTo: LocalDate? - ): ResponseEntity> { - val response: ReservationsResponse = reservationService.findFilteredReservations(themeId, memberId, dateFrom, dateTo) + ): ResponseEntity> { + val response: ReservationRetrieveListResponse = reservationService.findFilteredReservations(themeId, memberId, dateFrom, dateTo) return ResponseEntity.ok(CommonApiResponse(response)) } @@ -72,20 +72,20 @@ class ReservationController( @PostMapping("/reservations") override fun saveReservation( - @Valid @RequestBody reservationRequest: ReservationRequest, + @Valid @RequestBody reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest, @MemberId @Parameter(hidden = true) memberId: Long - ): ResponseEntity> { - val paymentRequest: PaymentApproveRequest = reservationRequest.paymentRequest + ): ResponseEntity> { + val paymentRequest: PaymentApproveRequest = reservationCreateWithPaymentRequest.toPaymentApproveRequest() val paymentResponse: PaymentApproveResponse = paymentClient.confirmPayment(paymentRequest) try { - val reservationResponse: ReservationResponse = reservationWithPaymentService.addReservationWithPayment( - reservationRequest, + val reservationRetrieveResponse: ReservationRetrieveResponse = reservationWithPaymentService.addReservationWithPayment( + reservationCreateWithPaymentRequest, paymentResponse, memberId ) - return ResponseEntity.created(URI.create("/reservations/${reservationResponse.id}")) - .body(CommonApiResponse(reservationResponse)) + return ResponseEntity.created(URI.create("/reservations/${reservationRetrieveResponse.id}")) + .body(CommonApiResponse(reservationRetrieveResponse)) } catch (e: RoomescapeException) { val cancelRequest = PaymentCancelRequest(paymentRequest.paymentKey, paymentRequest.amount, e.message!!) @@ -98,9 +98,9 @@ class ReservationController( @PostMapping("/reservations/admin") override fun saveReservationByAdmin( - @Valid @RequestBody adminReservationRequest: AdminReservationRequest - ): ResponseEntity> { - val response: ReservationResponse = + @Valid @RequestBody adminReservationRequest: AdminReservationCreateRequest + ): ResponseEntity> { + val response: ReservationRetrieveResponse = reservationService.addReservationByAdmin(adminReservationRequest) return ResponseEntity.created(URI.create("/reservations/${response.id}")) @@ -108,19 +108,19 @@ class ReservationController( } @GetMapping("/reservations/waiting") - override fun getAllWaiting(): ResponseEntity> { - val response: ReservationsResponse = reservationService.findAllWaiting() + override fun getAllWaiting(): ResponseEntity> { + val response: ReservationRetrieveListResponse = reservationService.findAllWaiting() return ResponseEntity.ok(CommonApiResponse(response)) } @PostMapping("/reservations/waiting") override fun saveWaiting( - @Valid @RequestBody waitingRequest: WaitingRequest, + @Valid @RequestBody waitingCreateRequest: WaitingCreateRequest, @MemberId @Parameter(hidden = true) memberId: Long, - ): ResponseEntity> { - val response: ReservationResponse = reservationService.addWaiting( - waitingRequest, + ): ResponseEntity> { + val response: ReservationRetrieveResponse = reservationService.addWaiting( + waitingCreateRequest, memberId ) diff --git a/src/main/java/roomescape/reservation/web/ReservationRequest.kt b/src/main/java/roomescape/reservation/web/ReservationRequest.kt index 3ac06436..bb69cb31 100644 --- a/src/main/java/roomescape/reservation/web/ReservationRequest.kt +++ b/src/main/java/roomescape/reservation/web/ReservationRequest.kt @@ -1,31 +1,19 @@ package roomescape.reservation.web -import com.fasterxml.jackson.annotation.JsonIgnore import io.swagger.v3.oas.annotations.media.Schema import roomescape.payment.infrastructure.client.PaymentApproveRequest import java.time.LocalDate -@Schema(name = "관리자 예약 저장 요청", description = "관리자의 예약 저장 요청시 사용됩니다.") -data class AdminReservationRequest( - @field:Schema(description = "예약 날짜. 지난 날짜는 지정할 수 없으며, yyyy-MM-dd 형식으로 입력해야 합니다.", type = "string", example = "2022-12-31") +data class AdminReservationCreateRequest( val date: LocalDate, - @field:Schema(description = "예약 시간 ID.", example = "1") val timeId: Long, - @field:Schema(description = "테마 ID", example = "1") val themeId: Long, - @field:Schema(description = "회원 ID", example = "1") val memberId: Long ) -@Schema(name = "회원의 예약 저장 요청", description = "회원의 예약 요청시 사용됩니다.") -data class ReservationRequest( - @field:Schema(description = "예약 날짜. 지난 날짜는 지정할 수 없으며, yyyy-MM-dd 형식으로 입력해야 합니다.", type = "string", example = "2022-12-31") +data class ReservationCreateWithPaymentRequest( val date: LocalDate, - - @field:Schema(description = "예약 시간 ID.", example = "1") val timeId: Long, - - @field:Schema(description = "테마 ID", example = "1") val themeId: Long, @field:Schema(description = "결제 위젯을 통해 받은 결제 키") @@ -39,23 +27,14 @@ data class ReservationRequest( @field:Schema(description = "결제 타입", example = "NORMAL") val paymentType: String -) { - @get:JsonIgnore - val paymentRequest: PaymentApproveRequest - get() = PaymentApproveRequest(paymentKey, orderId, amount, paymentType) -} +) -@Schema(name = "예약 대기 저장 요청", description = "회원의 예약 대기 요청시 사용됩니다.") -data class WaitingRequest( +fun ReservationCreateWithPaymentRequest.toPaymentApproveRequest(): PaymentApproveRequest = PaymentApproveRequest( + paymentKey, orderId, amount, paymentType +) - @field:Schema(description = "예약 날짜. 지난 날짜는 지정할 수 없으며, yyyy-MM-dd 형식으로 입력해야 합니다.", type = "string", example = "2022-12-31") +data class WaitingCreateRequest( val date: LocalDate, - - - @field:Schema(description = "예약 시간 ID", example = "1") val timeId: Long, - - - @field:Schema(description = "테마 ID", example = "1") val themeId: Long ) diff --git a/src/main/java/roomescape/reservation/web/ReservationResponse.kt b/src/main/java/roomescape/reservation/web/ReservationResponse.kt index fdcc3296..69778c31 100644 --- a/src/main/java/roomescape/reservation/web/ReservationResponse.kt +++ b/src/main/java/roomescape/reservation/web/ReservationResponse.kt @@ -11,65 +11,42 @@ import roomescape.theme.web.toResponse import java.time.LocalDate import java.time.LocalTime -@Schema(name = "회원의 예약 및 대기 응답", description = "회원의 예약 및 대기 정보 응답시 사용됩니다.") -data class MyReservationResponse( - @field:Schema(description = "예약 번호. 예약을 식별할 때 사용합니다.") +data class MyReservationRetrieveResponse( val id: Long, - - @field:Schema(description = "테마 이름") val themeName: String, - - @field:Schema(description = "예약 날짜", type = "string", example = "2022-12-31") val date: LocalDate, - - @field:Schema(description = "예약 시간", type = "string", example = "09:00") val time: LocalTime, - - @field:Schema(description = "예약 상태", type = "string") val status: ReservationStatus, - - @field:Schema(description = "예약 대기 상태일 때의 대기 순번. 확정된 예약은 0의 값을 가집니다.") + @field:Schema(description = "대기 순번. 확정된 예약은 0의 값을 가집니다.") val rank: Long, - @field:Schema(description = "결제 키. 결제가 완료된 예약에만 값이 존재합니다.") val paymentKey: String?, - @field:Schema(description = "결제 금액. 결제가 완료된 예약에만 값이 존재합니다.") val amount: Long? ) -@Schema(name = "회원의 예약 및 대기 목록 조회 응답", description = "회원의 예약 및 대기 목록 조회 응답시 사용됩니다.") -data class MyReservationsResponse( +data class MyReservationRetrieveListResponse( @field:Schema(description = "현재 로그인한 회원의 예약 및 대기 목록") - val reservations: List + val reservations: List ) -@Schema(name = "예약 정보", description = "예약 저장 및 조회 응답에 사용됩니다.") -data class ReservationResponse( - - @field:Schema(description = "예약 번호. 예약을 식별할 때 사용합니다.") +data class ReservationRetrieveResponse( val id: Long, - - @field:Schema(description = "예약 날짜", type = "string", example = "2022-12-31") val date: LocalDate, - @field:Schema(description = "예약한 회원 정보") @field:JsonProperty("member") val member: MemberRetrieveResponse, - @field:Schema(description = "예약 시간 정보") @field:JsonProperty("time") val time: TimeCreateResponse, - @field:Schema(description = "예약한 테마 정보") @field:JsonProperty("theme") val theme: ThemeResponse, - @field:Schema(description = "예약 상태", type = "string") val status: ReservationStatus ) -fun ReservationEntity.toCreateResponse(): ReservationResponse = ReservationResponse( +fun ReservationEntity.toRetrieveResponse(): ReservationRetrieveResponse = ReservationRetrieveResponse( id = this.id!!, date = this.date, member = this.member.toRetrieveResponse(), @@ -78,8 +55,6 @@ fun ReservationEntity.toCreateResponse(): ReservationResponse = ReservationRespo status = this.reservationStatus ) -@Schema(name = "예약 목록 조회 응답", description = "모든 예약 정보 조회 응답시 사용됩니다.") -data class ReservationsResponse( - @field:Schema(description = "모든 예약 및 대기 목록") - val reservations: List +data class ReservationRetrieveListResponse( + val reservations: List ) diff --git a/src/test/java/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt b/src/test/java/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt index cbb51428..44556c32 100644 --- a/src/test/java/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt +++ b/src/test/java/roomescape/payment/infrastructure/client/TossPaymentClientTest.kt @@ -52,7 +52,7 @@ class TossPaymentClientTest( assertSoftly(paymentResponse) { this.paymentKey shouldBe paymentRequest.paymentKey this.orderId shouldBe paymentRequest.orderId - this.amount shouldBe paymentRequest.amount + this.totalAmount shouldBe paymentRequest.amount } } diff --git a/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt b/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt index 3fef3aad..90f329e9 100644 --- a/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt +++ b/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.kt @@ -13,8 +13,8 @@ import roomescape.payment.web.PaymentCancelRequest import roomescape.payment.web.toCreateResponse import roomescape.reservation.infrastructure.persistence.ReservationEntity import roomescape.reservation.infrastructure.persistence.ReservationStatus -import roomescape.reservation.web.ReservationRequest -import roomescape.reservation.web.ReservationResponse +import roomescape.reservation.web.ReservationCreateWithPaymentRequest +import roomescape.reservation.web.ReservationRetrieveResponse import roomescape.util.* class ReservationWithPaymentServiceTest : FunSpec({ @@ -26,37 +26,37 @@ class ReservationWithPaymentServiceTest : FunSpec({ paymentService = paymentService ) - val reservationRequest: ReservationRequest = ReservationFixture.createRequest() + val reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest = ReservationFixture.createRequest() val paymentApproveResponse = PaymentFixture.createApproveResponse() val memberId = 1L val reservationEntity: ReservationEntity = ReservationFixture.create( id = 1L, - date = reservationRequest.date, - time = TimeFixture.create(id = reservationRequest.timeId), - theme = ThemeFixture.create(id = reservationRequest.themeId), + date = reservationCreateWithPaymentRequest.date, + time = TimeFixture.create(id = reservationCreateWithPaymentRequest.timeId), + theme = ThemeFixture.create(id = reservationCreateWithPaymentRequest.themeId), member = MemberFixture.create(id = memberId), status = ReservationStatus.CONFIRMED ) val paymentEntity: PaymentEntity = PaymentFixture.create( id = 1L, - orderId = reservationRequest.orderId, - paymentKey = reservationRequest.paymentKey, - totalAmount = reservationRequest.amount, + orderId = reservationCreateWithPaymentRequest.orderId, + paymentKey = reservationCreateWithPaymentRequest.paymentKey, + totalAmount = reservationCreateWithPaymentRequest.amount, reservation = reservationEntity, ) context("addReservationWithPayment") { test("예약 및 결제 정보를 저장한다.") { every { - reservationService.addReservation(reservationRequest, memberId) + reservationService.addReservation(reservationCreateWithPaymentRequest, memberId) } returns reservationEntity every { paymentService.createPayment(paymentApproveResponse, reservationEntity) } returns paymentEntity.toCreateResponse() - val result: ReservationResponse = reservationWithPaymentService.addReservationWithPayment( - request = reservationRequest, + val result: ReservationRetrieveResponse = reservationWithPaymentService.addReservationWithPayment( + request = reservationCreateWithPaymentRequest, paymentInfo = paymentApproveResponse, memberId = memberId ) diff --git a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt b/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt index 688e9d6b..e2e9ee82 100644 --- a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt +++ b/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationRepositoryTest.kt @@ -8,7 +8,7 @@ import jakarta.persistence.EntityManager import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest import org.springframework.data.repository.findByIdOrNull import roomescape.payment.infrastructure.persistence.PaymentEntity -import roomescape.reservation.web.MyReservationResponse +import roomescape.reservation.web.MyReservationRetrieveResponse import roomescape.theme.infrastructure.persistence.ThemeEntity import roomescape.util.PaymentFixture import roomescape.util.ReservationFixture @@ -168,7 +168,7 @@ class ReservationRepositoryTest( entityManager.clear() } - val result: List = reservationRepository.findMyReservations(reservation.member.id!!) + val result: List = reservationRepository.findMyReservations(reservation.member.id!!) result shouldHaveSize 1 assertSoftly(result.first()) { @@ -179,7 +179,7 @@ class ReservationRepositoryTest( } test("결제 정보가 없다면 paymentKey와 amount는 null로 반환한다.") { - val result: List = reservationRepository.findMyReservations(reservation.member.id!!) + val result: List = reservationRepository.findMyReservations(reservation.member.id!!) result shouldHaveSize 1 assertSoftly(result.first()) { diff --git a/src/test/java/roomescape/reservation/web/ReservationControllerTest.kt b/src/test/java/roomescape/reservation/web/ReservationControllerTest.kt index 2db062f3..946217eb 100644 --- a/src/test/java/roomescape/reservation/web/ReservationControllerTest.kt +++ b/src/test/java/roomescape/reservation/web/ReservationControllerTest.kt @@ -66,7 +66,7 @@ class ReservationControllerTest( val paymentApproveResponse = PaymentFixture.createApproveResponse().copy( paymentKey = reservationRequest.paymentKey, orderId = reservationRequest.orderId, - amount = reservationRequest.amount, + totalAmount = reservationRequest.amount, ) every { @@ -116,7 +116,7 @@ class ReservationControllerTest( val paymentApproveResponse = PaymentFixture.createApproveResponse().copy( paymentKey = reservationRequest.paymentKey, orderId = reservationRequest.orderId, - amount = reservationRequest.amount, + totalAmount = reservationRequest.amount, ) every { @@ -409,8 +409,8 @@ class ReservationControllerTest( context("POST /reservations/admin") { test("관리자가 예약을 추가하면 결제 대기 상태로 예약 생성") { val member = login(MemberFixture.create(role = Role.ADMIN)) - val adminRequest: AdminReservationRequest = createRequest().let { - AdminReservationRequest( + val adminRequest: AdminReservationCreateRequest = createRequest().let { + AdminReservationCreateRequest( date = it.date, themeId = it.themeId, timeId = it.timeId, @@ -473,8 +473,8 @@ class ReservationControllerTest( context("POST /reservations/waiting") { test("회원이 대기 예약을 추가한다.") { val member = login(MemberFixture.create(role = Role.MEMBER)) - val waitingRequest: WaitingRequest = createRequest().let { - WaitingRequest( + val waitingCreateRequest: WaitingCreateRequest = createRequest().let { + WaitingCreateRequest( date = it.date, themeId = it.themeId, timeId = it.timeId @@ -484,7 +484,7 @@ class ReservationControllerTest( Given { port(port) contentType(MediaType.APPLICATION_JSON_VALUE) - body(waitingRequest) + body(waitingCreateRequest) }.When { post("/reservations/waiting") }.Then { @@ -513,7 +513,7 @@ class ReservationControllerTest( } // 이미 예약된 시간, 테마로 대기 예약 요청 - val waitingRequest = WaitingRequest( + val waitingCreateRequest = WaitingCreateRequest( date = reservationRequest.date, themeId = reservationRequest.themeId, timeId = reservationRequest.timeId @@ -522,7 +522,7 @@ class ReservationControllerTest( Given { port(port) contentType(MediaType.APPLICATION_JSON_VALUE) - body(waitingRequest) + body(waitingCreateRequest) }.When { post("/reservations/waiting") }.Then { @@ -734,14 +734,14 @@ class ReservationControllerTest( fun createRequest( theme: ThemeEntity = ThemeFixture.create(), time: TimeEntity = TimeFixture.create(), - ): ReservationRequest { - lateinit var reservationRequest: ReservationRequest + ): ReservationCreateWithPaymentRequest { + lateinit var reservationCreateWithPaymentRequest: ReservationCreateWithPaymentRequest transactionTemplate.executeWithoutResult { entityManager.persist(theme) entityManager.persist(time) - reservationRequest = ReservationFixture.createRequest( + reservationCreateWithPaymentRequest = ReservationFixture.createRequest( themeId = theme.id!!, timeId = time.id!!, ) @@ -750,7 +750,7 @@ class ReservationControllerTest( entityManager.clear() } - return reservationRequest + return reservationCreateWithPaymentRequest } fun login(member: MemberEntity): MemberEntity { diff --git a/src/test/java/roomescape/util/Fixtures.kt b/src/test/java/roomescape/util/Fixtures.kt index 48a8b044..02f7a074 100644 --- a/src/test/java/roomescape/util/Fixtures.kt +++ b/src/test/java/roomescape/util/Fixtures.kt @@ -13,8 +13,8 @@ import roomescape.payment.web.PaymentCancelResponse import roomescape.reservation.infrastructure.persistence.ReservationEntity import roomescape.reservation.infrastructure.persistence.ReservationStatus import roomescape.reservation.infrastructure.persistence.TimeEntity -import roomescape.reservation.web.ReservationRequest -import roomescape.reservation.web.WaitingRequest +import roomescape.reservation.web.ReservationCreateWithPaymentRequest +import roomescape.reservation.web.WaitingCreateRequest import roomescape.theme.infrastructure.persistence.ThemeEntity import java.time.LocalDate import java.time.LocalTime @@ -88,7 +88,7 @@ object ReservationFixture { orderId: String = "orderId", amount: Long = 10000L, paymentType: String = "NORMAL", - ): ReservationRequest = ReservationRequest( + ): ReservationCreateWithPaymentRequest = ReservationCreateWithPaymentRequest( date = date, timeId = timeId, themeId = themeId, @@ -102,7 +102,7 @@ object ReservationFixture { date: LocalDate = LocalDate.now().plusWeeks(1), themeId: Long = 1L, timeId: Long = 1L - ): WaitingRequest = WaitingRequest( + ): WaitingCreateRequest = WaitingCreateRequest( date = date, timeId = timeId, themeId = themeId @@ -168,7 +168,7 @@ object PaymentFixture { paymentKey = PAYMENT_KEY, orderId = ORDER_ID, approvedAt = OffsetDateTime.now(), - amount = AMOUNT + totalAmount = AMOUNT ) fun createCancelRequest(): PaymentCancelRequest = PaymentCancelRequest(