From 4fadebd7c47124705d1f87272b4bfc95247c3e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Tue, 15 Jul 2025 21:55:43 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=EA=B2=B0=EC=A0=9C=20=EB=A1=A4?= =?UTF-8?q?=EB=B0=B1=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/koreatech/payment/event/PaymentRollBackEvent.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java diff --git a/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java b/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java new file mode 100644 index 0000000..4c6543d --- /dev/null +++ b/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java @@ -0,0 +1,7 @@ +package in.koreatech.payment.event; + +public record PaymentRollBackEvent( + String paymentKey +){ + +} From ee2a1eab95b54f963d38c41e3e725709e9ff4b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Sun, 20 Jul 2025 10:28:55 +0900 Subject: [PATCH 2/8] =?UTF-8?q?chore:=20=EA=B2=B0=EC=A0=9C=20=EB=A9=B1?= =?UTF-8?q?=EB=93=B1=ED=82=A4=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/order/model}/PaymentIdempotencyKey.java | 2 +- .../payment/repository/PaymentIdempotencyKeyRepository.java | 2 +- src/main/java/in/koreatech/payment/service/TossService.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/in/koreatech/{payment/model/entity => koin/domain/order/model}/PaymentIdempotencyKey.java (97%) diff --git a/src/main/java/in/koreatech/payment/model/entity/PaymentIdempotencyKey.java b/src/main/java/in/koreatech/koin/domain/order/model/PaymentIdempotencyKey.java similarity index 97% rename from src/main/java/in/koreatech/payment/model/entity/PaymentIdempotencyKey.java rename to src/main/java/in/koreatech/koin/domain/order/model/PaymentIdempotencyKey.java index 5b4963a..4e5bf64 100644 --- a/src/main/java/in/koreatech/payment/model/entity/PaymentIdempotencyKey.java +++ b/src/main/java/in/koreatech/koin/domain/order/model/PaymentIdempotencyKey.java @@ -1,4 +1,4 @@ -package in.koreatech.payment.model.entity; +package in.koreatech.koin.domain.order.model; import static jakarta.persistence.GenerationType.IDENTITY; import static lombok.AccessLevel.PROTECTED; diff --git a/src/main/java/in/koreatech/payment/repository/PaymentIdempotencyKeyRepository.java b/src/main/java/in/koreatech/payment/repository/PaymentIdempotencyKeyRepository.java index 8c162a5..3718b84 100644 --- a/src/main/java/in/koreatech/payment/repository/PaymentIdempotencyKeyRepository.java +++ b/src/main/java/in/koreatech/payment/repository/PaymentIdempotencyKeyRepository.java @@ -4,7 +4,7 @@ import org.springframework.data.repository.Repository; -import in.koreatech.payment.model.entity.PaymentIdempotencyKey; +import in.koreatech.koin.domain.order.model.PaymentIdempotencyKey; public interface PaymentIdempotencyKeyRepository extends Repository { diff --git a/src/main/java/in/koreatech/payment/service/TossService.java b/src/main/java/in/koreatech/payment/service/TossService.java index 173d9c4..d37871f 100644 --- a/src/main/java/in/koreatech/payment/service/TossService.java +++ b/src/main/java/in/koreatech/payment/service/TossService.java @@ -33,7 +33,7 @@ import in.koreatech.payment.exception.PaymentCancelException; import in.koreatech.payment.exception.PaymentConfirmException; import in.koreatech.payment.model.domain.TemporaryMenuItems; -import in.koreatech.payment.model.entity.PaymentIdempotencyKey; +import in.koreatech.koin.domain.order.model.PaymentIdempotencyKey; import in.koreatech.payment.model.redis.TemporaryPayment; import in.koreatech.payment.repository.PaymentIdempotencyKeyRepository; import in.koreatech.payment.repository.redis.TemporaryPaymentRedisRepository; From e8457ba6a19b2d5c71abfce24790e9cb69caf072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Sun, 20 Jul 2025 10:31:03 +0900 Subject: [PATCH 3/8] =?UTF-8?q?chore:=20=EA=B2=B0=EC=A0=9C=20=EB=A9=B1?= =?UTF-8?q?=EB=93=B1=ED=82=A4=20=EB=A6=AC=ED=8C=8C=EC=A7=80=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order}/repository/PaymentIdempotencyKeyRepository.java | 2 +- src/main/java/in/koreatech/payment/service/TossService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/in/koreatech/{payment => koin/domain/order}/repository/PaymentIdempotencyKeyRepository.java (88%) diff --git a/src/main/java/in/koreatech/payment/repository/PaymentIdempotencyKeyRepository.java b/src/main/java/in/koreatech/koin/domain/order/repository/PaymentIdempotencyKeyRepository.java similarity index 88% rename from src/main/java/in/koreatech/payment/repository/PaymentIdempotencyKeyRepository.java rename to src/main/java/in/koreatech/koin/domain/order/repository/PaymentIdempotencyKeyRepository.java index 3718b84..bfe9c3d 100644 --- a/src/main/java/in/koreatech/payment/repository/PaymentIdempotencyKeyRepository.java +++ b/src/main/java/in/koreatech/koin/domain/order/repository/PaymentIdempotencyKeyRepository.java @@ -1,4 +1,4 @@ -package in.koreatech.payment.repository; +package in.koreatech.koin.domain.order.repository; import java.util.Optional; diff --git a/src/main/java/in/koreatech/payment/service/TossService.java b/src/main/java/in/koreatech/payment/service/TossService.java index d37871f..9ba9432 100644 --- a/src/main/java/in/koreatech/payment/service/TossService.java +++ b/src/main/java/in/koreatech/payment/service/TossService.java @@ -35,7 +35,7 @@ import in.koreatech.payment.model.domain.TemporaryMenuItems; import in.koreatech.koin.domain.order.model.PaymentIdempotencyKey; import in.koreatech.payment.model.redis.TemporaryPayment; -import in.koreatech.payment.repository.PaymentIdempotencyKeyRepository; +import in.koreatech.koin.domain.order.repository.PaymentIdempotencyKeyRepository; import in.koreatech.payment.repository.redis.TemporaryPaymentRedisRepository; import in.koreatech.payment.util.OrderIdGenerator; import in.koreatech.payment.util.TemporaryMenuItemConverter; From 1d0678ef5fc172d0fdf0e9311fa1d6e65f3a9247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Sun, 20 Jul 2025 10:31:42 +0900 Subject: [PATCH 4/8] =?UTF-8?q?fix:=20=EA=B2=B0=EC=A0=9C=20=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=20=EB=A9=94=EC=86=8C=EB=93=9C=20=ED=8A=B8=EB=9E=9C?= =?UTF-8?q?=EC=9E=AD=EC=85=98=20=EB=A7=A4=EB=8B=88=EC=A0=80=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/in/koreatech/payment/service/TossService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/in/koreatech/payment/service/TossService.java b/src/main/java/in/koreatech/payment/service/TossService.java index 9ba9432..6cbf7d2 100644 --- a/src/main/java/in/koreatech/payment/service/TossService.java +++ b/src/main/java/in/koreatech/payment/service/TossService.java @@ -164,7 +164,7 @@ public PaymentConfirmResponse confirmPayment(String accessToken, String paymentK return response; } - @Transactional + @Transactional(transactionManager = "koinTransactionManager") public List cancelPayment(String accessToken, String paymentKey, String cancelReason) { Integer userId = jwtTokenResolver.getUserId(accessToken); User user = userRepository.getById(userId); From 37702ef7a852d8f67cdc66d3e9912579e83a9e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Sun, 20 Jul 2025 10:43:51 +0900 Subject: [PATCH 5/8] =?UTF-8?q?chore:=20import=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/in/koreatech/payment/model/redis/TemporaryPayment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/in/koreatech/payment/model/redis/TemporaryPayment.java b/src/main/java/in/koreatech/payment/model/redis/TemporaryPayment.java index 97b07ef..b0969a3 100644 --- a/src/main/java/in/koreatech/payment/model/redis/TemporaryPayment.java +++ b/src/main/java/in/koreatech/payment/model/redis/TemporaryPayment.java @@ -35,7 +35,7 @@ public class TemporaryPayment { private String phoneNumber; - private in.koreatech.koin.domain.order.model.OrderType orderType; + private OrderType orderType; private String address; From c3300cb3423628cdc26b0ab37c7a9813f2d044d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Sun, 20 Jul 2025 10:47:14 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=9C=ED=96=89=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/koreatech/payment/event/PaymentRollBackEvent.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java b/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java index 4c6543d..b3017bc 100644 --- a/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java +++ b/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java @@ -1,7 +1,10 @@ package in.koreatech.payment.event; +import in.koreatech.payment.model.redis.TemporaryPayment; + public record PaymentRollBackEvent( - String paymentKey -){ + String paymentKey, + TemporaryPayment temporaryPayment +) { } From d4840b8f5c2b05a5e9472e6d22e6929f38f737a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Sun, 20 Jul 2025 11:13:26 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=EA=B2=B0=EC=A0=9C=20=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payment/event/PaymentRollBackEvent.java | 8 +- .../service/PaymentRollBackService.java | 7 ++ .../service/TossPaymentRollBackService.java | 93 +++++++++++++++++++ .../payment/service/TossService.java | 5 + 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/main/java/in/koreatech/payment/service/PaymentRollBackService.java create mode 100644 src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java diff --git a/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java b/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java index b3017bc..61e4e30 100644 --- a/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java +++ b/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java @@ -1,10 +1,14 @@ package in.koreatech.payment.event; +import in.koreatech.payment.client.dto.response.TossPaymentConfirmResponse; import in.koreatech.payment.model.redis.TemporaryPayment; public record PaymentRollBackEvent( String paymentKey, - TemporaryPayment temporaryPayment + TemporaryPayment temporaryPayment, + TossPaymentConfirmResponse tossPaymentConfirmResponse ) { - + public static PaymentRollBackEvent from(String paymentKey, TemporaryPayment temporaryPayment, TossPaymentConfirmResponse tossPaymentConfirmResponse) { + return new PaymentRollBackEvent(paymentKey, temporaryPayment, tossPaymentConfirmResponse); + } } diff --git a/src/main/java/in/koreatech/payment/service/PaymentRollBackService.java b/src/main/java/in/koreatech/payment/service/PaymentRollBackService.java new file mode 100644 index 0000000..dea7c1c --- /dev/null +++ b/src/main/java/in/koreatech/payment/service/PaymentRollBackService.java @@ -0,0 +1,7 @@ +package in.koreatech.payment.service; + +import in.koreatech.payment.event.PaymentRollBackEvent; + +public interface PaymentRollBackService { + void paymentRollback(PaymentRollBackEvent event); +} diff --git a/src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java b/src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java new file mode 100644 index 0000000..12a8cf3 --- /dev/null +++ b/src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java @@ -0,0 +1,93 @@ +package in.koreatech.payment.service; + +import static org.springframework.transaction.annotation.Propagation.REQUIRES_NEW; +import static org.springframework.transaction.event.TransactionPhase.AFTER_ROLLBACK; + +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionalEventListener; + +import in.koreatech.koin.domain.order.cart.repository.CartRepository; +import in.koreatech.koin.domain.order.model.Order; +import in.koreatech.koin.domain.order.model.Payment; +import in.koreatech.koin.domain.order.model.PaymentCancel; +import in.koreatech.koin.domain.order.model.PaymentIdempotencyKey; +import in.koreatech.koin.domain.order.repository.OrderRepository; +import in.koreatech.koin.domain.order.repository.PaymentCancelRepository; +import in.koreatech.koin.domain.order.repository.PaymentIdempotencyKeyRepository; +import in.koreatech.koin.domain.order.repository.PaymentRepository; +import in.koreatech.koin.domain.order.shop.model.entity.shop.OrderableShop; +import in.koreatech.koin.domain.order.shop.repository.OrderableShopRepository; +import in.koreatech.koin.domain.user.model.User; +import in.koreatech.koin.domain.user.repository.UserRepository; +import in.koreatech.payment.client.TossPaymentClient; +import in.koreatech.payment.client.dto.response.PaymentCancelResponse; +import in.koreatech.payment.event.PaymentRollBackEvent; +import in.koreatech.payment.model.redis.TemporaryPayment; +import in.koreatech.payment.repository.redis.TemporaryPaymentRedisRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class TossPaymentRollBackService implements PaymentRollBackService { + + private final TossPaymentClient tossPaymentClient; + private final PaymentIdempotencyKeyRepository paymentIdempotencyKeyRepository; + private final UserRepository userRepository; + private final OrderableShopRepository orderableShopRepository; + private final OrderRepository orderRepository; + private final PaymentRepository paymentRepository; + private final TemporaryPaymentRedisRepository temporaryPaymentRedisRepository; + private final CartRepository cartRepository; + private final PaymentCancelRepository paymentCancelRepository; + + private static final String PAYMENT_CANCEL_REASON = "코인 서버 오류로 인한 결제 취소"; + + @TransactionalEventListener(phase = AFTER_ROLLBACK) + @Transactional(propagation = REQUIRES_NEW, transactionManager = "koinTransactionManager") + public void paymentRollback(PaymentRollBackEvent event) { + TemporaryPayment temporaryPayment = event.temporaryPayment(); + User user = userRepository.getById(temporaryPayment.getUserId()); + PaymentIdempotencyKey paymentIdempotencyKey = paymentIdempotencyKeyRepository + .findByUserId(user.getId()) + .map(idempotencyKey -> { + if (idempotencyKey.isOlderThanExpireDays()) { + idempotencyKey.updateIdempotencyKey(UUID.randomUUID().toString()); + } + return idempotencyKey; + }) + .orElseGet(() -> paymentIdempotencyKeyRepository.save( + PaymentIdempotencyKey.builder() + .userId(user.getId()) + .idempotencyKey(UUID.randomUUID().toString()) + .build() + )); + + PaymentCancelResponse response = tossPaymentClient.requestCancel(event.paymentKey(), + PAYMENT_CANCEL_REASON, paymentIdempotencyKey.getIdempotencyKey()); + + try { + OrderableShop orderableShop = orderableShopRepository.getById(temporaryPayment.getOrderableShopId()); + Order order = temporaryPayment.toOrder(user, orderableShop); + orderRepository.save(order); + + Payment payment = event.tossPaymentConfirmResponse().toEntity(order); + payment.cancel(); + paymentRepository.save(payment); + + List paymentCancels = response.getPaymentCancels(payment); + paymentCancelRepository.saveAll(paymentCancels); + + temporaryPaymentRedisRepository.deleteById(order.getId()); + cartRepository.deleteByUserId(user.getId()); + } catch (Exception e) { + log.error("결제 취소 과정에서 오류 발생 - paymentId: {}, userId: {}, orderId: {}", event.paymentKey(), + temporaryPayment.getUserId(), temporaryPayment.getOrderId()); + } + } +} diff --git a/src/main/java/in/koreatech/payment/service/TossService.java b/src/main/java/in/koreatech/payment/service/TossService.java index 6cbf7d2..737a3ec 100644 --- a/src/main/java/in/koreatech/payment/service/TossService.java +++ b/src/main/java/in/koreatech/payment/service/TossService.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.UUID; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +29,7 @@ import in.koreatech.payment.dto.request.TemporaryDeliveryPaymentSaveRequest; import in.koreatech.payment.dto.request.TemporaryTakeoutPaymentSaveRequest; import in.koreatech.payment.dto.response.PaymentConfirmResponse; +import in.koreatech.payment.event.PaymentRollBackEvent; import in.koreatech.payment.exception.OrderPriceMismatchException; import in.koreatech.payment.exception.PaymentAlreadyCanceledException; import in.koreatech.payment.exception.PaymentCancelException; @@ -58,6 +60,7 @@ public class TossService implements PaymentService { private final OrderableShopRepository orderableShopRepository; private final OrderRepository orderRepository; private final OrderMenuRepository orderMenuRepository; + private final ApplicationEventPublisher applicationEventPublisher; @Transactional public String createTemporaryDeliveryPayment(String accessToken, TemporaryDeliveryPaymentSaveRequest request) { @@ -147,6 +150,8 @@ public PaymentConfirmResponse confirmPayment(String accessToken, String paymentK throw PaymentConfirmException.withDetail("paymentStatus : " + tossPaymentResponse.status()); } + applicationEventPublisher.publishEvent(PaymentRollBackEvent.from(paymentKey, temporaryPayment, tossPaymentResponse)); + OrderableShop orderableShop = orderableShopRepository.getById(temporaryPayment.getOrderableShopId()); Order order = temporaryPayment.toOrder(user, orderableShop); orderRepository.save(order); From 0755c72c4b190485294d9765f49ed9d9c6d43936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=A0=EA=B4=80=EA=B7=9C?= Date: Sun, 20 Jul 2025 11:19:31 +0900 Subject: [PATCH 8/8] =?UTF-8?q?chore:=20=EA=B2=B0=EC=A0=9C=20=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=20=EB=A1=A4=EB=B0=B1=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mentRollBackEvent.java => TossPaymentRollBackEvent.java} | 6 +++--- .../koreatech/payment/service/PaymentRollBackService.java | 4 ++-- .../payment/service/TossPaymentRollBackService.java | 4 ++-- src/main/java/in/koreatech/payment/service/TossService.java | 5 +++-- 4 files changed, 10 insertions(+), 9 deletions(-) rename src/main/java/in/koreatech/payment/event/{PaymentRollBackEvent.java => TossPaymentRollBackEvent.java} (50%) diff --git a/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java b/src/main/java/in/koreatech/payment/event/TossPaymentRollBackEvent.java similarity index 50% rename from src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java rename to src/main/java/in/koreatech/payment/event/TossPaymentRollBackEvent.java index 61e4e30..835c0ca 100644 --- a/src/main/java/in/koreatech/payment/event/PaymentRollBackEvent.java +++ b/src/main/java/in/koreatech/payment/event/TossPaymentRollBackEvent.java @@ -3,12 +3,12 @@ import in.koreatech.payment.client.dto.response.TossPaymentConfirmResponse; import in.koreatech.payment.model.redis.TemporaryPayment; -public record PaymentRollBackEvent( +public record TossPaymentRollBackEvent( String paymentKey, TemporaryPayment temporaryPayment, TossPaymentConfirmResponse tossPaymentConfirmResponse ) { - public static PaymentRollBackEvent from(String paymentKey, TemporaryPayment temporaryPayment, TossPaymentConfirmResponse tossPaymentConfirmResponse) { - return new PaymentRollBackEvent(paymentKey, temporaryPayment, tossPaymentConfirmResponse); + public static TossPaymentRollBackEvent from(String paymentKey, TemporaryPayment temporaryPayment, TossPaymentConfirmResponse tossPaymentConfirmResponse) { + return new TossPaymentRollBackEvent(paymentKey, temporaryPayment, tossPaymentConfirmResponse); } } diff --git a/src/main/java/in/koreatech/payment/service/PaymentRollBackService.java b/src/main/java/in/koreatech/payment/service/PaymentRollBackService.java index dea7c1c..0b42951 100644 --- a/src/main/java/in/koreatech/payment/service/PaymentRollBackService.java +++ b/src/main/java/in/koreatech/payment/service/PaymentRollBackService.java @@ -1,7 +1,7 @@ package in.koreatech.payment.service; -import in.koreatech.payment.event.PaymentRollBackEvent; +import in.koreatech.payment.event.TossPaymentRollBackEvent; public interface PaymentRollBackService { - void paymentRollback(PaymentRollBackEvent event); + void paymentRollback(TossPaymentRollBackEvent event); } diff --git a/src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java b/src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java index 12a8cf3..783dfcc 100644 --- a/src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java +++ b/src/main/java/in/koreatech/payment/service/TossPaymentRollBackService.java @@ -25,7 +25,7 @@ import in.koreatech.koin.domain.user.repository.UserRepository; import in.koreatech.payment.client.TossPaymentClient; import in.koreatech.payment.client.dto.response.PaymentCancelResponse; -import in.koreatech.payment.event.PaymentRollBackEvent; +import in.koreatech.payment.event.TossPaymentRollBackEvent; import in.koreatech.payment.model.redis.TemporaryPayment; import in.koreatech.payment.repository.redis.TemporaryPaymentRedisRepository; import lombok.RequiredArgsConstructor; @@ -50,7 +50,7 @@ public class TossPaymentRollBackService implements PaymentRollBackService { @TransactionalEventListener(phase = AFTER_ROLLBACK) @Transactional(propagation = REQUIRES_NEW, transactionManager = "koinTransactionManager") - public void paymentRollback(PaymentRollBackEvent event) { + public void paymentRollback(TossPaymentRollBackEvent event) { TemporaryPayment temporaryPayment = event.temporaryPayment(); User user = userRepository.getById(temporaryPayment.getUserId()); PaymentIdempotencyKey paymentIdempotencyKey = paymentIdempotencyKeyRepository diff --git a/src/main/java/in/koreatech/payment/service/TossService.java b/src/main/java/in/koreatech/payment/service/TossService.java index 737a3ec..d5e032d 100644 --- a/src/main/java/in/koreatech/payment/service/TossService.java +++ b/src/main/java/in/koreatech/payment/service/TossService.java @@ -29,7 +29,7 @@ import in.koreatech.payment.dto.request.TemporaryDeliveryPaymentSaveRequest; import in.koreatech.payment.dto.request.TemporaryTakeoutPaymentSaveRequest; import in.koreatech.payment.dto.response.PaymentConfirmResponse; -import in.koreatech.payment.event.PaymentRollBackEvent; +import in.koreatech.payment.event.TossPaymentRollBackEvent; import in.koreatech.payment.exception.OrderPriceMismatchException; import in.koreatech.payment.exception.PaymentAlreadyCanceledException; import in.koreatech.payment.exception.PaymentCancelException; @@ -150,7 +150,8 @@ public PaymentConfirmResponse confirmPayment(String accessToken, String paymentK throw PaymentConfirmException.withDetail("paymentStatus : " + tossPaymentResponse.status()); } - applicationEventPublisher.publishEvent(PaymentRollBackEvent.from(paymentKey, temporaryPayment, tossPaymentResponse)); + applicationEventPublisher.publishEvent( + TossPaymentRollBackEvent.from(paymentKey, temporaryPayment, tossPaymentResponse)); OrderableShop orderableShop = orderableShopRepository.getById(temporaryPayment.getOrderableShopId()); Order order = temporaryPayment.toOrder(user, orderableShop);