-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDepositSuccessEventHandler.java
More file actions
73 lines (66 loc) · 3.34 KB
/
DepositSuccessEventHandler.java
File metadata and controls
73 lines (66 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package life.mosu.mosuserver.application.virtualaccount.event;
import life.mosu.mosuserver.application.virtualaccount.VirtualAccountLogService;
import life.mosu.mosuserver.domain.application.entity.ApplicationStatus;
import life.mosu.mosuserver.domain.application.repository.ApplicationJpaRepository;
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;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
public class DepositSuccessEventHandler implements DepositEventHandler<DepositSuccessEvent> {
private final VirtualAccountLogService virtualAccountLogService;
private final MailNotifier<DepositSuccessMailRequest> mailer;
private final NotifyEventPublisher notifier;
private final ExamApplicationJpaRepository examApplicationJpaRepository;
private final ApplicationJpaRepository applicationJpaRepository;
@Override
@Transactional
public void handle(DepositSuccessEvent event) {
var log = virtualAccountLogService.updateVirtualAccountLog(
event.getOrderId(),
DepositStatus.DONE
);
var exam = examApplicationJpaRepository.findByApplicationId(log.getApplicationId())
.stream().findFirst()
.orElseThrow(
() -> new CustomRuntimeException(ErrorCode.EXAM_APPLICATION_NOT_FOUND));
var application = applicationJpaRepository.findById(log.getApplicationId())
.orElseThrow(
() -> new CustomRuntimeException(ErrorCode.APPLICATION_LIST_NOT_FOUND));
if (application.getStatus() == ApplicationStatus.PENDING) {
application.changeStatus(ApplicationStatus.APPROVED);
}
LunaNotificationEvent lunaNotificationEvent = LunaNotificationEvent.create(
LunaNotificationStatus.APPLICATION_GUEST_SUCCESS,
exam.getUserId(), exam.getId());
notifier.notify(lunaNotificationEvent);
sendMail(log, event.getFormattedCreatedAt());
}
/**
* 이벤트 핸들러에서 가상계좌 입금 성공 시 메일을 발송합니다. ( 관리자 확인 용)
*
* @param log
* @param createdAt
*/
private void sendMail(VirtualAccountLogJpaEntity log, String createdAt) {
DepositSuccessMailRequest request = DepositSuccessMailRequest.of(
log.getOrderId(),
log.getAccountNumber(),
log.getBankName(),
log.getCustomerName(),
createdAt
);
mailer.send(request);
}
}