From 571f6b2e1135218c5dd93bd015630d12934f3163 Mon Sep 17 00:00:00 2001 From: pricelees Date: Wed, 16 Jul 2025 11:14:11 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20payment=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=82=B4=20DTO=20=EC=BD=94=ED=8B=80=EB=A6=B0=20?= =?UTF-8?q?=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EB=B0=8F=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payment/business/PaymentService.java | 21 +++--- .../java/roomescape/payment/web/PaymentDTO.kt | 69 +++++++++++++++++++ .../web/dto/request/PaymentCancelRequest.java | 4 -- .../web/dto/request/PaymentRequest.java | 4 -- .../dto/response/PaymentCancelResponse.java | 16 ----- .../web/dto/response/PaymentResponse.java | 14 ---- .../response/ReservationPaymentResponse.java | 15 ---- .../response/TossPaymentErrorResponse.java | 4 -- .../PaymentCancelResponseDeserializer.kt | 11 ++- .../controller/ReservationController.java | 28 ++++---- .../dto/request/ReservationRequest.java | 6 +- .../ReservationWithPaymentService.java | 16 ++--- .../payment/SampleTossPaymentConst.kt | 10 ++- .../payment/business/PaymentServiceTest.java | 29 ++++---- .../PaymentCancelResponseDeserializerTest.kt | 8 +-- .../controller/ReservationControllerTest.java | 22 +++--- .../ReservationWithPaymentServiceTest.java | 20 +++--- 17 files changed, 154 insertions(+), 143 deletions(-) create mode 100644 src/main/java/roomescape/payment/web/PaymentDTO.kt delete mode 100644 src/main/java/roomescape/payment/web/dto/request/PaymentCancelRequest.java delete mode 100644 src/main/java/roomescape/payment/web/dto/request/PaymentRequest.java delete mode 100644 src/main/java/roomescape/payment/web/dto/response/PaymentCancelResponse.java delete mode 100644 src/main/java/roomescape/payment/web/dto/response/PaymentResponse.java delete mode 100644 src/main/java/roomescape/payment/web/dto/response/ReservationPaymentResponse.java delete mode 100644 src/main/java/roomescape/payment/web/dto/response/TossPaymentErrorResponse.java diff --git a/src/main/java/roomescape/payment/business/PaymentService.java b/src/main/java/roomescape/payment/business/PaymentService.java index add0f3ae..2d22dd43 100644 --- a/src/main/java/roomescape/payment/business/PaymentService.java +++ b/src/main/java/roomescape/payment/business/PaymentService.java @@ -13,10 +13,8 @@ import roomescape.payment.infrastructure.persistence.CanceledPayment; import roomescape.payment.infrastructure.persistence.CanceledPaymentRepository; import roomescape.payment.infrastructure.persistence.Payment; import roomescape.payment.infrastructure.persistence.PaymentRepository; -import roomescape.payment.web.dto.request.PaymentCancelRequest; -import roomescape.payment.web.dto.response.PaymentCancelResponse; -import roomescape.payment.web.dto.response.PaymentResponse; -import roomescape.payment.web.dto.response.ReservationPaymentResponse; +import roomescape.payment.web.PaymentCancel; +import roomescape.payment.web.ReservationPaymentResponse; import roomescape.reservation.domain.Reservation; @Service @@ -31,9 +29,10 @@ public class PaymentService { this.canceledPaymentRepository = canceledPaymentRepository; } - public ReservationPaymentResponse savePayment(PaymentResponse paymentResponse, Reservation reservation) { - Payment payment = new Payment(paymentResponse.orderId(), paymentResponse.paymentKey(), - paymentResponse.totalAmount(), reservation, paymentResponse.approvedAt()); + public ReservationPaymentResponse savePayment(roomescape.payment.web.PaymentApprove.Response paymentResponse, + Reservation reservation) { + Payment payment = new Payment(paymentResponse.orderId, paymentResponse.paymentKey, + paymentResponse.totalAmount, reservation, paymentResponse.approvedAt); Payment saved = paymentRepository.save(payment); return ReservationPaymentResponse.from(saved); } @@ -43,12 +42,12 @@ public class PaymentService { return paymentRepository.findByReservationId(reservationId); } - public void saveCanceledPayment(PaymentCancelResponse cancelInfo, OffsetDateTime approvedAt, String paymentKey) { + public void saveCanceledPayment(PaymentCancel.Response cancelInfo, OffsetDateTime approvedAt, String paymentKey) { canceledPaymentRepository.save(new CanceledPayment( - paymentKey, cancelInfo.cancelReason(), cancelInfo.cancelAmount(), approvedAt, cancelInfo.canceledAt())); + paymentKey, cancelInfo.cancelReason, cancelInfo.cancelAmount, approvedAt, cancelInfo.canceledAt)); } - public PaymentCancelRequest cancelPaymentByAdmin(Long reservationId) { + public PaymentCancel.Request cancelPaymentByAdmin(Long reservationId) { String paymentKey = findPaymentByReservationId(reservationId) .orElseThrow(() -> new RoomescapeException(ErrorType.PAYMENT_NOT_POUND, String.format("[reservationId: %d]", reservationId), HttpStatus.NOT_FOUND)) @@ -56,7 +55,7 @@ public class PaymentService { // 취소 시간은 현재 시간으로 일단 생성한 뒤, 결제 취소 완료 후 해당 시간으로 변경합니다. CanceledPayment canceled = cancelPayment(paymentKey, "고객 요청", OffsetDateTime.now()); - return new PaymentCancelRequest(paymentKey, canceled.getCancelAmount(), canceled.getCancelReason()); + return new PaymentCancel.Request(paymentKey, canceled.getCancelAmount(), canceled.getCancelReason()); } private CanceledPayment cancelPayment(String paymentKey, String cancelReason, OffsetDateTime canceledAt) { diff --git a/src/main/java/roomescape/payment/web/PaymentDTO.kt b/src/main/java/roomescape/payment/web/PaymentDTO.kt new file mode 100644 index 00000000..ae13950e --- /dev/null +++ b/src/main/java/roomescape/payment/web/PaymentDTO.kt @@ -0,0 +1,69 @@ +package roomescape.payment.web + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import roomescape.payment.web.support.PaymentCancelResponseDeserializer +import roomescape.reservation.dto.response.ReservationResponse +import java.time.OffsetDateTime + +class PaymentApprove { + @JvmRecord + data class Request( + @JvmField val paymentKey: String, + @JvmField val orderId: String, + @JvmField val amount: Long, + @JvmField val paymentType: String + ) + + @JvmRecord + @JsonIgnoreProperties(ignoreUnknown = true) + data class Response( + @JvmField val paymentKey: String, + @JvmField val orderId: String, + @JvmField val approvedAt: OffsetDateTime, + @JvmField val totalAmount: Long + ) +} + +class PaymentCancel { + @JvmRecord + data class Request( + @JvmField val paymentKey: String, + @JvmField val amount: Long, + @JvmField val cancelReason: String + ) + + @JvmRecord + @JsonDeserialize(using = PaymentCancelResponseDeserializer::class) + data class Response( + @JvmField val cancelStatus: String, + @JvmField val cancelReason: String, + @JvmField val cancelAmount: Long, + @JvmField val canceledAt: OffsetDateTime + ) +} + + +@JvmRecord +data class ReservationPaymentResponse( + val id: Long, + val orderId: String, + val paymentKey: String, + val totalAmount: Long, + val reservation: ReservationResponse, + val approvedAt: OffsetDateTime +) { + companion object { + @JvmStatic + fun from(saved: roomescape.payment.infrastructure.persistence.Payment): ReservationPaymentResponse { + return ReservationPaymentResponse( + saved.id, + saved.orderId, + saved.paymentKey, + saved.totalAmount, + ReservationResponse.from(saved.reservation), + saved.approvedAt + ) + } + } +} diff --git a/src/main/java/roomescape/payment/web/dto/request/PaymentCancelRequest.java b/src/main/java/roomescape/payment/web/dto/request/PaymentCancelRequest.java deleted file mode 100644 index bf925405..00000000 --- a/src/main/java/roomescape/payment/web/dto/request/PaymentCancelRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package roomescape.payment.web.dto.request; - -public record PaymentCancelRequest(String paymentKey, Long amount, String cancelReason) { -} diff --git a/src/main/java/roomescape/payment/web/dto/request/PaymentRequest.java b/src/main/java/roomescape/payment/web/dto/request/PaymentRequest.java deleted file mode 100644 index bcda7c41..00000000 --- a/src/main/java/roomescape/payment/web/dto/request/PaymentRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package roomescape.payment.web.dto.request; - -public record PaymentRequest(String paymentKey, String orderId, Long amount, String paymentType) { -} diff --git a/src/main/java/roomescape/payment/web/dto/response/PaymentCancelResponse.java b/src/main/java/roomescape/payment/web/dto/response/PaymentCancelResponse.java deleted file mode 100644 index acf10776..00000000 --- a/src/main/java/roomescape/payment/web/dto/response/PaymentCancelResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package roomescape.payment.web.dto.response; - -import java.time.OffsetDateTime; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -import roomescape.payment.web.support.PaymentCancelResponseDeserializer; - -@JsonDeserialize(using = PaymentCancelResponseDeserializer.class) -public record PaymentCancelResponse( - String cancelStatus, - String cancelReason, - Long cancelAmount, - OffsetDateTime canceledAt -) { -} diff --git a/src/main/java/roomescape/payment/web/dto/response/PaymentResponse.java b/src/main/java/roomescape/payment/web/dto/response/PaymentResponse.java deleted file mode 100644 index ea351332..00000000 --- a/src/main/java/roomescape/payment/web/dto/response/PaymentResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package roomescape.payment.web.dto.response; - -import java.time.OffsetDateTime; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -@JsonIgnoreProperties(ignoreUnknown = true) -public record PaymentResponse( - String paymentKey, - String orderId, - OffsetDateTime approvedAt, - Long totalAmount -) { -} diff --git a/src/main/java/roomescape/payment/web/dto/response/ReservationPaymentResponse.java b/src/main/java/roomescape/payment/web/dto/response/ReservationPaymentResponse.java deleted file mode 100644 index f62854b5..00000000 --- a/src/main/java/roomescape/payment/web/dto/response/ReservationPaymentResponse.java +++ /dev/null @@ -1,15 +0,0 @@ -package roomescape.payment.web.dto.response; - -import java.time.OffsetDateTime; - -import roomescape.payment.infrastructure.persistence.Payment; -import roomescape.reservation.dto.response.ReservationResponse; - -public record ReservationPaymentResponse(Long id, String orderId, String paymentKey, Long totalAmount, - ReservationResponse reservation, OffsetDateTime approvedAt) { - - public static ReservationPaymentResponse from(Payment saved) { - return new ReservationPaymentResponse(saved.getId(), saved.getOrderId(), saved.getPaymentKey(), - saved.getTotalAmount(), ReservationResponse.from(saved.getReservation()), saved.getApprovedAt()); - } -} diff --git a/src/main/java/roomescape/payment/web/dto/response/TossPaymentErrorResponse.java b/src/main/java/roomescape/payment/web/dto/response/TossPaymentErrorResponse.java deleted file mode 100644 index 7f5163ee..00000000 --- a/src/main/java/roomescape/payment/web/dto/response/TossPaymentErrorResponse.java +++ /dev/null @@ -1,4 +0,0 @@ -package roomescape.payment.web.dto.response; - -public record TossPaymentErrorResponse(String code, String message) { -} diff --git a/src/main/java/roomescape/payment/web/support/PaymentCancelResponseDeserializer.kt b/src/main/java/roomescape/payment/web/support/PaymentCancelResponseDeserializer.kt index c1e7b904..14d59c12 100644 --- a/src/main/java/roomescape/payment/web/support/PaymentCancelResponseDeserializer.kt +++ b/src/main/java/roomescape/payment/web/support/PaymentCancelResponseDeserializer.kt @@ -5,24 +5,23 @@ import com.fasterxml.jackson.core.TreeNode import com.fasterxml.jackson.databind.DeserializationContext import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.deser.std.StdDeserializer -import roomescape.payment.web.dto.response.PaymentCancelResponse +import roomescape.payment.web.PaymentCancel import java.io.IOException import java.time.OffsetDateTime class PaymentCancelResponseDeserializer( - vc: Class? = null -) : StdDeserializer(vc) { - + vc: Class? = null +) : StdDeserializer(vc) { @Throws(IOException::class) override fun deserialize( jsonParser: JsonParser, deserializationContext: DeserializationContext? - ): PaymentCancelResponse { + ): PaymentCancel.Response { val cancels: JsonNode = jsonParser.codec.readTree(jsonParser) .get("cancels") .get(0) as JsonNode - return PaymentCancelResponse( + return PaymentCancel.Response( cancels.get("cancelStatus").asText(), cancels.get("cancelReason").asText(), cancels.get("cancelAmount").asLong(), diff --git a/src/main/java/roomescape/reservation/controller/ReservationController.java b/src/main/java/roomescape/reservation/controller/ReservationController.java index 01709713..f5df5f57 100644 --- a/src/main/java/roomescape/reservation/controller/ReservationController.java +++ b/src/main/java/roomescape/reservation/controller/ReservationController.java @@ -31,10 +31,8 @@ import roomescape.common.dto.response.RoomescapeApiResponse; import roomescape.common.dto.response.RoomescapeErrorResponse; import roomescape.common.exception.RoomescapeException; import roomescape.payment.infrastructure.client.TossPaymentClient; -import roomescape.payment.web.dto.request.PaymentCancelRequest; -import roomescape.payment.web.dto.request.PaymentRequest; -import roomescape.payment.web.dto.response.PaymentCancelResponse; -import roomescape.payment.web.dto.response.PaymentResponse; +import roomescape.payment.web.PaymentApprove; +import roomescape.payment.web.PaymentCancel; import roomescape.reservation.dto.request.AdminReservationRequest; import roomescape.reservation.dto.request.ReservationRequest; import roomescape.reservation.dto.request.WaitingRequest; @@ -120,13 +118,13 @@ public class ReservationController { return RoomescapeApiResponse.success(); } - PaymentCancelRequest paymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment( + PaymentCancel.Request paymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment( reservationId, memberId); - PaymentCancelResponse paymentCancelResponse = paymentClient.cancelPayment(paymentCancelRequest); + PaymentCancel.Response paymentCancelResponse = paymentClient.cancelPayment(paymentCancelRequest); - reservationWithPaymentService.updateCanceledTime(paymentCancelRequest.paymentKey(), - paymentCancelResponse.canceledAt()); + reservationWithPaymentService.updateCanceledTime(paymentCancelRequest.paymentKey, + paymentCancelResponse.canceledAt); return RoomescapeApiResponse.success(); } @@ -144,21 +142,21 @@ public class ReservationController { @MemberId @Parameter(hidden = true) Long memberId, HttpServletResponse response ) { - PaymentRequest paymentRequest = reservationRequest.getPaymentRequest(); - PaymentResponse paymentResponse = paymentClient.confirmPayment(paymentRequest); + PaymentApprove.Request paymentRequest = reservationRequest.getPaymentRequest(); + PaymentApprove.Response paymentResponse = paymentClient.confirmPayment(paymentRequest); try { ReservationResponse reservationResponse = reservationWithPaymentService.addReservationWithPayment( reservationRequest, paymentResponse, memberId); return getCreatedReservationResponse(reservationResponse, response); } catch (RoomescapeException e) { - PaymentCancelRequest cancelRequest = new PaymentCancelRequest(paymentRequest.paymentKey(), - paymentRequest.amount(), e.getMessage()); + PaymentCancel.Request cancelRequest = new PaymentCancel.Request(paymentRequest.paymentKey, + paymentRequest.amount, e.getMessage()); - PaymentCancelResponse paymentCancelResponse = paymentClient.cancelPayment(cancelRequest); + PaymentCancel.Response paymentCancelResponse = paymentClient.cancelPayment(cancelRequest); - reservationWithPaymentService.saveCanceledPayment(paymentCancelResponse, paymentResponse.approvedAt(), - paymentRequest.paymentKey()); + reservationWithPaymentService.saveCanceledPayment(paymentCancelResponse, paymentResponse.approvedAt, + paymentRequest.paymentKey); throw e; } } diff --git a/src/main/java/roomescape/reservation/dto/request/ReservationRequest.java b/src/main/java/roomescape/reservation/dto/request/ReservationRequest.java index 06bbbecf..e15b00fb 100644 --- a/src/main/java/roomescape/reservation/dto/request/ReservationRequest.java +++ b/src/main/java/roomescape/reservation/dto/request/ReservationRequest.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; -import roomescape.payment.web.dto.request.PaymentRequest; +import roomescape.payment.web.PaymentApprove; @Schema(name = "회원의 예약 저장 요청", description = "회원의 예약 요청시 사용됩니다.") public record ReservationRequest( @@ -30,7 +30,7 @@ public record ReservationRequest( ) { @JsonIgnore - public PaymentRequest getPaymentRequest() { - return new PaymentRequest(paymentKey, orderId, amount, paymentType); + public PaymentApprove.Request getPaymentRequest() { + return new PaymentApprove.Request(paymentKey, orderId, amount, paymentType); } } diff --git a/src/main/java/roomescape/reservation/service/ReservationWithPaymentService.java b/src/main/java/roomescape/reservation/service/ReservationWithPaymentService.java index 5721d742..edec7bae 100644 --- a/src/main/java/roomescape/reservation/service/ReservationWithPaymentService.java +++ b/src/main/java/roomescape/reservation/service/ReservationWithPaymentService.java @@ -6,10 +6,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import roomescape.payment.business.PaymentService; -import roomescape.payment.web.dto.request.PaymentCancelRequest; -import roomescape.payment.web.dto.response.PaymentCancelResponse; -import roomescape.payment.web.dto.response.PaymentResponse; -import roomescape.payment.web.dto.response.ReservationPaymentResponse; +import roomescape.payment.web.PaymentApprove; +import roomescape.payment.web.PaymentCancel; +import roomescape.payment.web.ReservationPaymentResponse; import roomescape.reservation.domain.Reservation; import roomescape.reservation.dto.request.ReservationRequest; import roomescape.reservation.dto.response.ReservationResponse; @@ -27,7 +26,8 @@ public class ReservationWithPaymentService { this.paymentService = paymentService; } - public ReservationResponse addReservationWithPayment(ReservationRequest request, PaymentResponse paymentInfo, + public ReservationResponse addReservationWithPayment(ReservationRequest request, + PaymentApprove.Response paymentInfo, Long memberId) { Reservation reservation = reservationService.addReservation(request, memberId); ReservationPaymentResponse reservationPaymentResponse = paymentService.savePayment(paymentInfo, reservation); @@ -35,12 +35,12 @@ public class ReservationWithPaymentService { return reservationPaymentResponse.reservation(); } - public void saveCanceledPayment(PaymentCancelResponse cancelInfo, OffsetDateTime approvedAt, String paymentKey) { + public void saveCanceledPayment(PaymentCancel.Response cancelInfo, OffsetDateTime approvedAt, String paymentKey) { paymentService.saveCanceledPayment(cancelInfo, approvedAt, paymentKey); } - public PaymentCancelRequest removeReservationWithPayment(Long reservationId, Long memberId) { - PaymentCancelRequest paymentCancelRequest = paymentService.cancelPaymentByAdmin(reservationId); + public PaymentCancel.Request removeReservationWithPayment(Long reservationId, Long memberId) { + PaymentCancel.Request paymentCancelRequest = paymentService.cancelPaymentByAdmin(reservationId); reservationService.removeReservationById(reservationId, memberId); return paymentCancelRequest; } diff --git a/src/test/java/roomescape/payment/SampleTossPaymentConst.kt b/src/test/java/roomescape/payment/SampleTossPaymentConst.kt index 9ed6b179..ba1db53e 100644 --- a/src/test/java/roomescape/payment/SampleTossPaymentConst.kt +++ b/src/test/java/roomescape/payment/SampleTossPaymentConst.kt @@ -1,8 +1,8 @@ package roomescape.payment import roomescape.payment.SampleTossPaymentConst.amount -import roomescape.payment.web.dto.request.PaymentCancelRequest -import roomescape.payment.web.dto.request.PaymentRequest +import roomescape.payment.web.PaymentApprove +import roomescape.payment.web.PaymentCancel import kotlin.math.roundToLong object SampleTossPaymentConst { @@ -22,7 +22,7 @@ object SampleTossPaymentConst { val cancelReason: String = "테스트 결제 취소" @JvmField - val paymentRequest: PaymentRequest = PaymentRequest( + val paymentRequest: PaymentApprove.Request = PaymentApprove.Request( paymentKey, orderId, amount, @@ -40,7 +40,7 @@ object SampleTossPaymentConst { """.trimIndent() @JvmField - val cancelRequest: PaymentCancelRequest = PaymentCancelRequest( + val cancelRequest: PaymentCancel.Request = PaymentCancel.Request( paymentKey, amount, cancelReason @@ -125,7 +125,6 @@ object SampleTossPaymentConst { "method": "$paymentType", "version": "2022-11-16" } - """.trimIndent() @JvmField @@ -205,7 +204,6 @@ object SampleTossPaymentConst { "method": "$paymentType", "version": "2022-11-16" } - """.trimIndent() } diff --git a/src/test/java/roomescape/payment/business/PaymentServiceTest.java b/src/test/java/roomescape/payment/business/PaymentServiceTest.java index d81b0d90..ee975e38 100644 --- a/src/test/java/roomescape/payment/business/PaymentServiceTest.java +++ b/src/test/java/roomescape/payment/business/PaymentServiceTest.java @@ -18,9 +18,9 @@ import roomescape.member.infrastructure.persistence.Member; import roomescape.member.infrastructure.persistence.MemberRepository; import roomescape.member.infrastructure.persistence.Role; import roomescape.payment.infrastructure.persistence.CanceledPaymentRepository; -import roomescape.payment.web.dto.request.PaymentCancelRequest; -import roomescape.payment.web.dto.response.PaymentResponse; -import roomescape.payment.web.dto.response.ReservationPaymentResponse; +import roomescape.payment.web.PaymentApprove; +import roomescape.payment.web.PaymentCancel; +import roomescape.payment.web.ReservationPaymentResponse; import roomescape.reservation.domain.Reservation; import roomescape.reservation.domain.ReservationStatus; import roomescape.reservation.domain.ReservationTime; @@ -50,7 +50,8 @@ class PaymentServiceTest { @DisplayName("결제 정보를 저장한다.") void savePayment() { // given - PaymentResponse paymentInfo = new PaymentResponse("payment-key", "order-id", OffsetDateTime.now(), 10000L); + PaymentApprove.Response paymentInfo = new PaymentApprove.Response("payment-key", "order-id", + OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); @@ -64,14 +65,15 @@ class PaymentServiceTest { // then assertThat(reservationPaymentResponse.reservation().id()).isEqualTo(reservation.getId()); - assertThat(reservationPaymentResponse.paymentKey()).isEqualTo(paymentInfo.paymentKey()); + assertThat(reservationPaymentResponse.paymentKey()).isEqualTo(paymentInfo.paymentKey); } @Test @DisplayName("예약 ID로 결제 정보를 제거하고, 결제 취소 테이블에 취소 정보를 저장한다.") void cancelPaymentByAdmin() { // given - PaymentResponse paymentInfo = new PaymentResponse("payment-key", "order-id", OffsetDateTime.now(), 10000L); + PaymentApprove.Response paymentInfo = new PaymentApprove.Response("payment-key", "order-id", + OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); @@ -83,13 +85,13 @@ class PaymentServiceTest { paymentService.savePayment(paymentInfo, reservation); // when - PaymentCancelRequest paymentCancelRequest = paymentService.cancelPaymentByAdmin(reservation.getId()); + PaymentCancel.Request paymentCancelRequest = paymentService.cancelPaymentByAdmin(reservation.getId()); // then assertThat(canceledPaymentRepository.findByPaymentKey("payment-key")).isNotEmpty(); - assertThat(paymentCancelRequest.paymentKey()).isEqualTo(paymentInfo.paymentKey()); - assertThat(paymentCancelRequest.cancelReason()).isEqualTo("고객 요청"); - assertThat(paymentCancelRequest.amount()).isEqualTo(10000L); + assertThat(paymentCancelRequest.paymentKey).isEqualTo(paymentInfo.paymentKey); + assertThat(paymentCancelRequest.cancelReason).isEqualTo("고객 요청"); + assertThat(paymentCancelRequest.amount).isEqualTo(10000L); } @Test @@ -107,7 +109,8 @@ class PaymentServiceTest { @DisplayName("결제 취소 정보에 있는 취소 시간을 업데이트한다.") void updateCanceledTime() { // given - PaymentResponse paymentInfo = new PaymentResponse("payment-key", "order-id", OffsetDateTime.now(), 10000L); + PaymentApprove.Response paymentInfo = new PaymentApprove.Response("payment-key", "order-id", + OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); @@ -121,10 +124,10 @@ class PaymentServiceTest { // when OffsetDateTime canceledAt = OffsetDateTime.now().plusHours(2L); - paymentService.updateCanceledTime(paymentInfo.paymentKey(), canceledAt); + paymentService.updateCanceledTime(paymentInfo.paymentKey, canceledAt); // then - canceledPaymentRepository.findByPaymentKey(paymentInfo.paymentKey()) + canceledPaymentRepository.findByPaymentKey(paymentInfo.paymentKey) .ifPresent(canceledPayment -> assertThat(canceledPayment.getCanceledAt()).isEqualTo(canceledAt)); } diff --git a/src/test/java/roomescape/payment/web/support/PaymentCancelResponseDeserializerTest.kt b/src/test/java/roomescape/payment/web/support/PaymentCancelResponseDeserializerTest.kt index d440f41b..32c33f90 100644 --- a/src/test/java/roomescape/payment/web/support/PaymentCancelResponseDeserializerTest.kt +++ b/src/test/java/roomescape/payment/web/support/PaymentCancelResponseDeserializerTest.kt @@ -7,22 +7,22 @@ import io.kotest.assertions.assertSoftly import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.shouldBe import roomescape.payment.SampleTossPaymentConst -import roomescape.payment.web.dto.response.PaymentCancelResponse +import roomescape.payment.web.PaymentCancel class PaymentCancelResponseDeserializerTest : StringSpec({ val objectMapper: ObjectMapper = jacksonObjectMapper().registerModule( SimpleModule().addDeserializer( - PaymentCancelResponse::class.java, + PaymentCancel.Response::class.java, PaymentCancelResponseDeserializer() ) ) "결제 취소 응답을 역직렬화하여 PaymentCancelResponse 객체를 생성한다" { val cancelResponseJson: String = SampleTossPaymentConst.cancelJson - val cancelResponse: PaymentCancelResponse = objectMapper.readValue( + val cancelResponse: PaymentCancel.Response = objectMapper.readValue( cancelResponseJson, - PaymentCancelResponse::class.java + PaymentCancel.Response::class.java ) assertSoftly(cancelResponse) { diff --git a/src/test/java/roomescape/reservation/controller/ReservationControllerTest.java b/src/test/java/roomescape/reservation/controller/ReservationControllerTest.java index 44978828..9095b18f 100644 --- a/src/test/java/roomescape/reservation/controller/ReservationControllerTest.java +++ b/src/test/java/roomescape/reservation/controller/ReservationControllerTest.java @@ -41,10 +41,8 @@ import roomescape.payment.infrastructure.persistence.CanceledPayment; import roomescape.payment.infrastructure.persistence.CanceledPaymentRepository; import roomescape.payment.infrastructure.persistence.Payment; import roomescape.payment.infrastructure.persistence.PaymentRepository; -import roomescape.payment.web.dto.request.PaymentCancelRequest; -import roomescape.payment.web.dto.request.PaymentRequest; -import roomescape.payment.web.dto.response.PaymentCancelResponse; -import roomescape.payment.web.dto.response.PaymentResponse; +import roomescape.payment.web.PaymentApprove; +import roomescape.payment.web.PaymentCancel; import roomescape.reservation.domain.Reservation; import roomescape.reservation.domain.ReservationStatus; import roomescape.reservation.domain.ReservationTime; @@ -105,8 +103,8 @@ public class ReservationControllerTest { "paymentType", "DEFAULT" ); - when(paymentClient.confirmPayment(any(PaymentRequest.class))).thenReturn( - new PaymentResponse("pk", "oi", OffsetDateTime.of(date, time, ZoneOffset.ofHours(9)), 1000L)); + when(paymentClient.confirmPayment(any(PaymentApprove.Request.class))).thenReturn( + new PaymentApprove.Response("pk", "oi", OffsetDateTime.of(date, time, ZoneOffset.ofHours(9)), 1000L)); RestAssured.given().log().all() .contentType(ContentType.JSON) @@ -404,8 +402,8 @@ public class ReservationControllerTest { new Payment("pk", "oi", 1000L, saved, OffsetDateTime.now().minusHours(1L))); // when - when(paymentClient.cancelPayment(any(PaymentCancelRequest.class))) - .thenReturn(new PaymentCancelResponse("pk", "고객 요청", savedPayment.getTotalAmount(), + when(paymentClient.cancelPayment(any(PaymentCancel.Request.class))) + .thenReturn(new PaymentCancel.Response("pk", "고객 요청", savedPayment.getTotalAmount(), OffsetDateTime.now())); // then @@ -433,11 +431,11 @@ public class ReservationControllerTest { String paymentKey = "pk"; OffsetDateTime canceledAt = OffsetDateTime.now().plusHours(1L).withNano(0); OffsetDateTime approvedAt = OffsetDateTime.of(localDateTime, ZoneOffset.ofHours(9)); - when(paymentClient.confirmPayment(any(PaymentRequest.class))) - .thenReturn(new PaymentResponse(paymentKey, "oi", approvedAt, 1000L)); + when(paymentClient.confirmPayment(any(PaymentApprove.Request.class))) + .thenReturn(new PaymentApprove.Response(paymentKey, "oi", approvedAt, 1000L)); - when(paymentClient.cancelPayment(any(PaymentCancelRequest.class))) - .thenReturn(new PaymentCancelResponse(paymentKey, "고객 요청", 1000L, canceledAt)); + when(paymentClient.cancelPayment(any(PaymentCancel.Request.class))) + .thenReturn(new PaymentCancel.Response(paymentKey, "고객 요청", 1000L, canceledAt)); RestAssured.given().log().all() .contentType(ContentType.JSON) diff --git a/src/test/java/roomescape/reservation/service/ReservationWithPaymentServiceTest.java b/src/test/java/roomescape/reservation/service/ReservationWithPaymentServiceTest.java index 478b1d38..4f74c7e6 100644 --- a/src/test/java/roomescape/reservation/service/ReservationWithPaymentServiceTest.java +++ b/src/test/java/roomescape/reservation/service/ReservationWithPaymentServiceTest.java @@ -18,8 +18,8 @@ import roomescape.member.infrastructure.persistence.MemberRepository; import roomescape.member.infrastructure.persistence.Role; import roomescape.payment.infrastructure.persistence.CanceledPaymentRepository; import roomescape.payment.infrastructure.persistence.PaymentRepository; -import roomescape.payment.web.dto.request.PaymentCancelRequest; -import roomescape.payment.web.dto.response.PaymentResponse; +import roomescape.payment.web.PaymentApprove; +import roomescape.payment.web.PaymentCancel; import roomescape.reservation.domain.Reservation; import roomescape.reservation.domain.ReservationStatus; import roomescape.reservation.domain.ReservationTime; @@ -53,7 +53,8 @@ class ReservationWithPaymentServiceTest { @DisplayName("예약과 결제 정보를 추가한다.") void addReservationWithPayment() { // given - PaymentResponse paymentInfo = new PaymentResponse("payment-key", "order-id", OffsetDateTime.now(), 10000L); + PaymentApprove.Response paymentInfo = new PaymentApprove.Response("payment-key", "order-id", + OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); @@ -88,7 +89,8 @@ class ReservationWithPaymentServiceTest { @DisplayName("예약 ID를 이용하여 예약과 결제 정보를 제거하고, 결제 취소 정보를 저장한다.") void removeReservationWithPayment() { // given - PaymentResponse paymentInfo = new PaymentResponse("payment-key", "order-id", OffsetDateTime.now(), 10000L); + PaymentApprove.Response paymentInfo = new PaymentApprove.Response("payment-key", "order-id", + OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); @@ -101,11 +103,11 @@ class ReservationWithPaymentServiceTest { reservationRequest, paymentInfo, member.getId()); // when - PaymentCancelRequest paymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment( + PaymentCancel.Request paymentCancelRequest = reservationWithPaymentService.removeReservationWithPayment( reservationResponse.id(), member.getId()); // then - assertThat(paymentCancelRequest.cancelReason()).isEqualTo("고객 요청"); + assertThat(paymentCancelRequest.cancelReason).isEqualTo("고객 요청"); assertThat(reservationRepository.findById(reservationResponse.id())).isEmpty(); assertThat(paymentRepository.findByPaymentKey("payment-key")).isEmpty(); assertThat(canceledPaymentRepository.findByPaymentKey("payment-key")).isNotEmpty(); @@ -115,7 +117,8 @@ class ReservationWithPaymentServiceTest { @DisplayName("결제 정보가 없으면 True를 반환한다.") void isNotPaidReservation() { // given - PaymentResponse paymentInfo = new PaymentResponse("payment-key", "order-id", OffsetDateTime.now(), 10000L); + PaymentApprove.Response paymentInfo = new PaymentApprove.Response("payment-key", "order-id", + OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); @@ -136,7 +139,8 @@ class ReservationWithPaymentServiceTest { @DisplayName("결제 정보가 있으면 False를 반환한다.") void isPaidReservation() { // given - PaymentResponse paymentInfo = new PaymentResponse("payment-key", "order-id", OffsetDateTime.now(), 10000L); + PaymentApprove.Response paymentInfo = new PaymentApprove.Response("payment-key", "order-id", + OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));