From abdc8fc7edd8e3e686df52b5181a2e5ba09f45d1 Mon Sep 17 00:00:00 2001 From: KNU-K Date: Mon, 11 Aug 2025 23:41:41 +0900 Subject: [PATCH] feat: add notification for successful deposit with exam application check --- .../event/DepositSuccessEventHandler.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/life/mosu/mosuserver/application/virtualaccount/event/DepositSuccessEventHandler.java b/src/main/java/life/mosu/mosuserver/application/virtualaccount/event/DepositSuccessEventHandler.java index 1c53ec90..8ee5347e 100644 --- a/src/main/java/life/mosu/mosuserver/application/virtualaccount/event/DepositSuccessEventHandler.java +++ b/src/main/java/life/mosu/mosuserver/application/virtualaccount/event/DepositSuccessEventHandler.java @@ -2,10 +2,16 @@ import life.mosu.mosuserver.application.virtualaccount.VirtualAccountLogService; +import life.mosu.mosuserver.domain.examapplication.repository.ExamApplicationJpaRepository; import life.mosu.mosuserver.domain.virtualaccount.DepositStatus; import life.mosu.mosuserver.domain.virtualaccount.VirtualAccountLogJpaEntity; +import life.mosu.mosuserver.global.exception.CustomRuntimeException; +import life.mosu.mosuserver.global.exception.ErrorCode; import life.mosu.mosuserver.infra.notify.MailNotifier; +import life.mosu.mosuserver.infra.notify.dto.luna.LunaNotificationEvent; +import life.mosu.mosuserver.infra.notify.dto.luna.LunaNotificationStatus; import life.mosu.mosuserver.infra.notify.dto.mail.DepositSuccessMailRequest; +import life.mosu.mosuserver.infra.notify.support.NotifyEventPublisher; import life.mosu.mosuserver.presentation.virtualaccount.dto.event.DepositSuccessEvent; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -17,6 +23,8 @@ public class DepositSuccessEventHandler implements DepositEventHandler mailer; + private final NotifyEventPublisher notifier; + private final ExamApplicationJpaRepository examApplicationJpaRepository; @Override @Transactional @@ -25,6 +33,16 @@ public void handle(DepositSuccessEvent event) { event.getOrderId(), DepositStatus.DONE ); + var exam = examApplicationJpaRepository.findByApplicationId(log.getApplicationId()) + .stream().findFirst() + .orElseThrow( + () -> new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND)); + + LunaNotificationEvent lunaNotificationEvent = LunaNotificationEvent.create( + LunaNotificationStatus.APPLICATION_SUCCESS, + exam.getUserId(), exam.getId()); + + notifier.notify(lunaNotificationEvent); sendMail(log, event.getFormattedCreatedAt()); }