diff --git a/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java b/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java index 2cbbff09..3c08190a 100644 --- a/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java +++ b/src/main/java/life/mosu/mosuserver/application/refund/RefundService.java @@ -1,6 +1,8 @@ package life.mosu.mosuserver.application.refund; import life.mosu.mosuserver.application.refund.processor.TossRefundProcessor; +import life.mosu.mosuserver.domain.payment.entity.PaymentJpaEntity; +import life.mosu.mosuserver.domain.payment.entity.PaymentStatus; import life.mosu.mosuserver.domain.payment.projection.PaymentWithLunchProjection; import life.mosu.mosuserver.domain.payment.repository.PaymentJpaRepository; import life.mosu.mosuserver.domain.refund.entity.RefundJpaEntity; @@ -48,14 +50,23 @@ public void doProcess(Long userId, MergedRefundRequest request) { PaymentWithLunchProjection targetPayment = findPaymentOrThrow(paymentKey, examApplicationId); + log.info("target payment log : {}", targetPayment); int totalQuantity = getTotalPaymentCount(paymentKey); + + log.info("total quantity log : {}", totalQuantity); + int refundAmount = calculateRefundAmount(totalQuantity, targetPayment.lunchChecked()); RefundJpaEntity refundEntity = processRefund(request, refundAmount, targetPayment.examApplicationId()); try { refundJpaRepository.save(refundEntity); + PaymentJpaEntity payment = paymentJpaRepository.findByExamApplicationId( + targetPayment.examApplicationId()) + .orElseThrow(() -> new CustomRuntimeException(ErrorCode.PAYMENT_NOT_FOUND)); + + payment.changeStatus(PaymentStatus.ABORTED); eventTxService.publishSuccessEvent(refundEntity.getTransactionKey(), refundAmount, userId, targetPayment.examId(), examApplicationId); } catch (Exception e) { @@ -75,7 +86,8 @@ private PaymentWithLunchProjection findPaymentOrThrow(String paymentKey, } private int getTotalPaymentCount(String paymentKey) { - return paymentJpaRepository.findByPaymentKey(paymentKey).size(); + return paymentJpaRepository.findByPaymentKeyAndPaymentStatus(paymentKey, PaymentStatus.DONE) + .size(); } private int calculateRefundAmount(int totalQuantity, boolean lunchChecked) { diff --git a/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventListener.java b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventListener.java index 0779b23e..dccc27df 100644 --- a/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventListener.java +++ b/src/main/java/life/mosu/mosuserver/application/refund/tx/RefundTxEventListener.java @@ -35,7 +35,6 @@ public void afterCommitHandler(RefundTxEvent event) { RefundContext ctx = event.getContext(); quotaSyncService.sync(ctx.examId()); log.info("[AFTER_COMMIT] 환불 성공 후 알림톡 발송 시작: orderId={}", ctx.transactionKey()); - paymentJpaRepository.deleteByExamApplicationId(ctx.examApplicationId()); sendNotification(ctx.userId(), ctx.examApplicationId()); } diff --git a/src/main/java/life/mosu/mosuserver/application/virtualaccount/processor/CreateVirtualAccountProcessor.java b/src/main/java/life/mosu/mosuserver/application/virtualaccount/processor/CreateVirtualAccountProcessor.java index a0b72233..581a5406 100644 --- a/src/main/java/life/mosu/mosuserver/application/virtualaccount/processor/CreateVirtualAccountProcessor.java +++ b/src/main/java/life/mosu/mosuserver/application/virtualaccount/processor/CreateVirtualAccountProcessor.java @@ -30,7 +30,8 @@ public class CreateVirtualAccountProcessor implements @Override public VirtualAccountResponse process(CreateVirtualAccountRequest request) { - var application = examApplicationJpaRepository.findById(request.applicationId()) + var application = examApplicationJpaRepository.findByApplicationId(request.applicationId()) + .stream().findFirst() .orElseThrow( () -> new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND)); diff --git a/src/main/java/life/mosu/mosuserver/domain/payment/repository/PaymentJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/payment/repository/PaymentJpaRepository.java index 32d1becd..c45efc26 100644 --- a/src/main/java/life/mosu/mosuserver/domain/payment/repository/PaymentJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/payment/repository/PaymentJpaRepository.java @@ -2,7 +2,9 @@ import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; import life.mosu.mosuserver.domain.payment.entity.PaymentJpaEntity; +import life.mosu.mosuserver.domain.payment.entity.PaymentStatus; import life.mosu.mosuserver.domain.payment.projection.PaymentWithLunchProjection; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -34,7 +36,8 @@ public interface PaymentJpaRepository extends JpaRepository findByPaymentKeyWithLunch(String paymentKey); - List findByPaymentKey(String paymentKey); + List findByPaymentKeyAndPaymentStatus(String paymentKey, + PaymentStatus status); @Query(""" SELECT p @@ -43,4 +46,6 @@ public interface PaymentJpaRepository extends JpaRepository findFailedPayments(@Param("time") LocalDateTime time); + + Optional findByExamApplicationId(Long examApplicationId); }