From 18187ed921c29703d5909f0febe1ab7dd6896b96 Mon Sep 17 00:00:00 2001 From: Sumin Hwang <163857590+tnals0924@users.noreply.github.com> Date: Wed, 14 Oct 2026 15:36:38 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=EC=8B=A0=EC=B2=AD=C2=B7=EA=B3=B5?= =?UTF-8?q?=EC=A7=80=20=EC=95=8C=EB=A6=BC=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kookmin/stream/common/event/EventApplicationCanceled.java | 4 ++++ .../java/kr/ac/kookmin/stream/common/event/EventApplied.java | 4 ++++ .../kr/ac/kookmin/stream/common/event/LockerAssigned.java | 4 ++++ .../java/kr/ac/kookmin/stream/common/event/NoticeCreated.java | 4 ++++ 4 files changed, 16 insertions(+) create mode 100644 core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java create mode 100644 core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java create mode 100644 core/common/src/main/java/kr/ac/kookmin/stream/common/event/LockerAssigned.java create mode 100644 core/common/src/main/java/kr/ac/kookmin/stream/common/event/NoticeCreated.java diff --git a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java new file mode 100644 index 00000000..a2c9f915 --- /dev/null +++ b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java @@ -0,0 +1,4 @@ +package kr.ac.kookmin.stream.common.event; + +/** 회원이 행사 신청을 취소했다. 행사명은 알림 문구에 쓰려고 취소 시점의 값을 싣는다. */ +public record EventApplicationCanceled(Long memberId, Long eventId, String eventTitle) implements DomainEvent {} diff --git a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java new file mode 100644 index 00000000..e01635c7 --- /dev/null +++ b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java @@ -0,0 +1,4 @@ +package kr.ac.kookmin.stream.common.event; + +/** 회원이 행사를 신청했다. 행사명은 알림 문구에 쓰려고 신청 시점의 값을 싣는다. */ +public record EventApplied(Long memberId, Long eventId, String eventTitle) implements DomainEvent {} diff --git a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/LockerAssigned.java b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/LockerAssigned.java new file mode 100644 index 00000000..a264bc65 --- /dev/null +++ b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/LockerAssigned.java @@ -0,0 +1,4 @@ +package kr.ac.kookmin.stream.common.event; + +/** 회원이 사물함을 신청해 배정받았다. 신청과 배정이 동시에 일어난다. */ +public record LockerAssigned(Long memberId, Long lockerPeriodId) implements DomainEvent {} diff --git a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/NoticeCreated.java b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/NoticeCreated.java new file mode 100644 index 00000000..aea81c71 --- /dev/null +++ b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/NoticeCreated.java @@ -0,0 +1,4 @@ +package kr.ac.kookmin.stream.common.event; + +/** 운영진이 새 공지를 등록했다. 공지는 저장하는 즉시 공개된다. */ +public record NoticeCreated(Long noticeId) implements DomainEvent {} From b8fab50f9b82e97a0a5e545c0cb13e3839f80b16 Mon Sep 17 00:00:00 2001 From: Sumin Hwang <163857590+tnals0924@users.noreply.github.com> Date: Wed, 14 Oct 2026 15:37:05 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=ED=96=89=EC=82=AC=20=EC=8B=A0?= =?UTF-8?q?=EC=B2=AD=C2=B7=EC=B7=A8=EC=86=8C=20=EC=8B=9C=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/service/impl/EventApplicationServiceImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java index f77b88e0..6598dfd9 100644 --- a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java +++ b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java @@ -7,6 +7,9 @@ import java.util.stream.Collectors; import kr.ac.kookmin.stream.common.BusinessException; import kr.ac.kookmin.stream.common.CursorSliceResult; +import kr.ac.kookmin.stream.common.OutboxWriter; +import kr.ac.kookmin.stream.common.event.EventApplicationCanceled; +import kr.ac.kookmin.stream.common.event.EventApplied; import kr.ac.kookmin.stream.event.domain.event.domain.Event; import kr.ac.kookmin.stream.event.domain.event.domain.EventApplication; import kr.ac.kookmin.stream.event.domain.event.domain.EventApplicationAnswer; @@ -31,6 +34,7 @@ class EventApplicationServiceImpl implements EventApplicationService { private final EventRepository eventRepository; private final EventApplyAnswerValidator eventApplyAnswerValidator; + private final OutboxWriter outboxWriter; @Override @Transactional(readOnly = true) @@ -55,6 +59,7 @@ public EventApplicationResult apply(Long eventId, Long memberId, EventApplyComma EventApplication.create(eventId, memberId, LocalDateTime.now()) ); eventRepository.saveAnswers(toAnswers(application.getId(), command)); + outboxWriter.record(new EventApplied(memberId, eventId, event.getTitle())); return new EventApplicationResult(application.getId(), event); } @@ -119,6 +124,7 @@ public void cancelApplication(Long applicationId, Long memberId) { application.cancel(now); eventRepository.saveApplication(application); + outboxWriter.record(new EventApplicationCanceled(memberId, event.getId(), event.getTitle())); } /** 남의 신청은 없는 것으로 보여야 하므로 조회 단계에서 회원 식별자로 함께 거른다. */ From 64e126315a0a8d52819ee1e3feb9aba87aeac20a Mon Sep 17 00:00:00 2001 From: Sumin Hwang <163857590+tnals0924@users.noreply.github.com> Date: Wed, 14 Oct 2026 15:37:07 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20=EC=82=AC=EB=AC=BC=ED=95=A8=20?= =?UTF-8?q?=EB=B0=B0=EC=A0=95=20=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../locker/service/impl/LockerApplicationServiceImpl.java | 4 ++++ .../locker/service/impl/LockerApplicationServiceImplTest.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImpl.java b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImpl.java index 1f3f3c0c..f766c670 100644 --- a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImpl.java +++ b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImpl.java @@ -6,6 +6,8 @@ import java.util.function.Function; import java.util.stream.Collectors; import kr.ac.kookmin.stream.common.BusinessException; +import kr.ac.kookmin.stream.common.OutboxWriter; +import kr.ac.kookmin.stream.common.event.LockerAssigned; import kr.ac.kookmin.stream.event.domain.locker.domain.Locker; import kr.ac.kookmin.stream.event.domain.locker.domain.LockerApplication; import kr.ac.kookmin.stream.event.domain.locker.domain.LockerApplicationResult; @@ -25,6 +27,7 @@ class LockerApplicationServiceImpl implements LockerApplicationService { private final LockerRepository lockerRepository; private final LockerApplicationRepository lockerApplicationRepository; + private final OutboxWriter outboxWriter; @Override @Transactional @@ -35,6 +38,7 @@ public LockerApplicationResult apply(Long memberId, LockerApplyCommand command) LockerApplication application = lockerApplicationRepository.save( LockerApplication.create(period.getId(), memberId, locker.getId(), LocalDateTime.now()) ); + outboxWriter.record(new LockerAssigned(memberId, period.getId())); return new LockerApplicationResult(application, locker, period); } diff --git a/core/domain/event/src/test/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImplTest.java b/core/domain/event/src/test/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImplTest.java index 9a0cd7d9..cee547a3 100644 --- a/core/domain/event/src/test/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImplTest.java +++ b/core/domain/event/src/test/java/kr/ac/kookmin/stream/event/domain/locker/service/impl/LockerApplicationServiceImplTest.java @@ -58,7 +58,8 @@ private static Locker locker(LockerStatus status) { } private static LockerApplicationServiceImpl service(FakeLockerRepository repository) { - return new LockerApplicationServiceImpl(repository, repository.applications); + // 아웃박스 기록은 이 테스트의 관심사가 아니라 아무것도 하지 않는다 + return new LockerApplicationServiceImpl(repository, repository.applications, event -> {}); } private static LockerApplyCommand command() { From 931c2db16914bf736417c6463b604c63f717754c Mon Sep 17 00:00:00 2001 From: Sumin Hwang <163857590+tnals0924@users.noreply.github.com> Date: Wed, 14 Oct 2026 15:37:16 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20=EA=B3=B5=EC=A7=80=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/notice/service/impl/NoticeServiceImpl.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java index f5d5d39f..8597370c 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java @@ -4,6 +4,8 @@ import java.time.temporal.ChronoUnit; import kr.ac.kookmin.stream.common.BusinessException; import kr.ac.kookmin.stream.common.CursorSliceResult; +import kr.ac.kookmin.stream.common.OutboxWriter; +import kr.ac.kookmin.stream.common.event.NoticeCreated; import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCategory; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCreateCommand; @@ -21,6 +23,7 @@ class NoticeServiceImpl implements NoticeService { private final NoticeRepository noticeRepository; + private final OutboxWriter outboxWriter; @Override @Transactional(readOnly = true) @@ -39,9 +42,13 @@ public Notice getNotice(Long id) { .orElseThrow(() -> new BusinessException(NoticeErrorCode.NOTICE_NOT_FOUND)); } + // 공지 저장과 알림 이벤트 기록이 함께 커밋되도록 트랜잭션을 건다 @Override + @Transactional public Notice create(Long createdBy, NoticeCreateCommand command) { - return noticeRepository.save(Notice.create(createdBy, command)); + Notice notice = noticeRepository.save(Notice.create(createdBy, command)); + outboxWriter.record(new NoticeCreated(notice.getId())); + return notice; } @Override From e471a0ad0671aab1f3640c3ca914fdb12f0b3f76 Mon Sep 17 00:00:00 2001 From: Sumin Hwang <163857590+tnals0924@users.noreply.github.com> Date: Wed, 14 Oct 2026 15:37:44 +0900 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20=EC=A6=89=EC=8B=9C=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=EB=84=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/NotificationEventListener.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java diff --git a/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java b/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java new file mode 100644 index 00000000..f860f4d6 --- /dev/null +++ b/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java @@ -0,0 +1,46 @@ +package kr.ac.kookmin.stream.member.domain.notification.service.impl; + +import java.util.List; +import kr.ac.kookmin.stream.common.event.EventApplicationCanceled; +import kr.ac.kookmin.stream.common.event.EventApplied; +import kr.ac.kookmin.stream.common.event.LockerAssigned; +import kr.ac.kookmin.stream.common.event.NoticeCreated; +import kr.ac.kookmin.stream.member.domain.notification.domain.NotificationType; +import lombok.RequiredArgsConstructor; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 다른 도메인의 이벤트를 알림으로 바꾼다. 아웃박스 릴레이가 트랜잭션 밖에서 발행하므로 {@code @EventListener}로 받는다. + * 예외를 던지면 릴레이가 같은 이벤트를 다시 발행한다. + */ +@Component +@RequiredArgsConstructor +class NotificationEventListener { + + private final NotificationDispatcher notificationDispatcher; + + @EventListener + public void on(EventApplied event) { + notificationDispatcher.dispatch( + NotificationType.EVENT_APPLIED, List.of(event.eventTitle()), event.eventId(), List.of(event.memberId())); + } + + @EventListener + public void on(EventApplicationCanceled event) { + notificationDispatcher.dispatch( + NotificationType.EVENT_APPLICATION_CANCELED, List.of(event.eventTitle()), event.eventId(), List.of(event.memberId())); + } + + @EventListener + public void on(LockerAssigned event) { + notificationDispatcher.dispatch( + NotificationType.LOCKER_ASSIGNED, List.of(), event.lockerPeriodId(), List.of(event.memberId())); + } + + // 공지는 활성 회원 전체에게 간다 + @EventListener + public void on(NoticeCreated event) { + notificationDispatcher.dispatchToAll(NotificationType.NOTICE_CREATED, List.of(), event.noticeId(), List.of()); + } +} From 0be040d28ce2ce052039474b6658e170e0ad707f Mon Sep 17 00:00:00 2001 From: Sumin Hwang <163857590+tnals0924@users.noreply.github.com> Date: Mon, 19 Oct 2026 00:54:32 +0900 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=ED=96=89=EC=82=AC=20=EC=8B=A0?= =?UTF-8?q?=EC=B2=AD=20=EC=95=8C=EB=A6=BC=20=EC=9D=B4=EB=8F=99=20=EB=8C=80?= =?UTF-8?q?=EC=83=81=EC=9D=84=20=EC=8B=A0=EC=B2=AD=20ID=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/kr/ac/kookmin/stream/common/event/EventApplied.java | 2 +- .../domain/event/service/impl/EventApplicationServiceImpl.java | 2 +- .../notification/service/impl/NotificationEventListener.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java index e01635c7..a174ffbe 100644 --- a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java +++ b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplied.java @@ -1,4 +1,4 @@ package kr.ac.kookmin.stream.common.event; /** 회원이 행사를 신청했다. 행사명은 알림 문구에 쓰려고 신청 시점의 값을 싣는다. */ -public record EventApplied(Long memberId, Long eventId, String eventTitle) implements DomainEvent {} +public record EventApplied(Long memberId, Long eventId, Long applicationId, String eventTitle) implements DomainEvent {} diff --git a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java index 6598dfd9..bb4f278b 100644 --- a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java +++ b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java @@ -59,7 +59,7 @@ public EventApplicationResult apply(Long eventId, Long memberId, EventApplyComma EventApplication.create(eventId, memberId, LocalDateTime.now()) ); eventRepository.saveAnswers(toAnswers(application.getId(), command)); - outboxWriter.record(new EventApplied(memberId, eventId, event.getTitle())); + outboxWriter.record(new EventApplied(memberId, eventId, application.getId(), event.getTitle())); return new EventApplicationResult(application.getId(), event); } diff --git a/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java b/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java index f860f4d6..cf31f10b 100644 --- a/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java +++ b/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java @@ -20,10 +20,11 @@ class NotificationEventListener { private final NotificationDispatcher notificationDispatcher; + // 알림을 누르면 신청 내역 상세로 가야 하므로 행사가 아니라 신청 ID를 대상으로 준다 @EventListener public void on(EventApplied event) { notificationDispatcher.dispatch( - NotificationType.EVENT_APPLIED, List.of(event.eventTitle()), event.eventId(), List.of(event.memberId())); + NotificationType.EVENT_APPLIED, List.of(event.eventTitle()), event.applicationId(), List.of(event.memberId())); } @EventListener From 7b7ac96cbf5bdc1a5c32f3e511381eeec37965cf Mon Sep 17 00:00:00 2001 From: Sumin Hwang <163857590+tnals0924@users.noreply.github.com> Date: Mon, 19 Oct 2026 00:56:50 +0900 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=ED=96=89=EC=82=AC=20=EC=8B=A0?= =?UTF-8?q?=EC=B2=AD=20=EC=B7=A8=EC=86=8C=20=EC=95=8C=EB=A6=BC=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=20=EB=8C=80=EC=83=81=EC=9D=84=20=EC=8B=A0=EC=B2=AD=20?= =?UTF-8?q?ID=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kookmin/stream/common/event/EventApplicationCanceled.java | 2 +- .../event/service/impl/EventApplicationServiceImpl.java | 2 +- .../notification/service/impl/NotificationEventListener.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java index a2c9f915..65dfc29f 100644 --- a/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java +++ b/core/common/src/main/java/kr/ac/kookmin/stream/common/event/EventApplicationCanceled.java @@ -1,4 +1,4 @@ package kr.ac.kookmin.stream.common.event; /** 회원이 행사 신청을 취소했다. 행사명은 알림 문구에 쓰려고 취소 시점의 값을 싣는다. */ -public record EventApplicationCanceled(Long memberId, Long eventId, String eventTitle) implements DomainEvent {} +public record EventApplicationCanceled(Long memberId, Long eventId, Long applicationId, String eventTitle) implements DomainEvent {} diff --git a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java index bb4f278b..8a515453 100644 --- a/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java +++ b/core/domain/event/src/main/java/kr/ac/kookmin/stream/event/domain/event/service/impl/EventApplicationServiceImpl.java @@ -124,7 +124,7 @@ public void cancelApplication(Long applicationId, Long memberId) { application.cancel(now); eventRepository.saveApplication(application); - outboxWriter.record(new EventApplicationCanceled(memberId, event.getId(), event.getTitle())); + outboxWriter.record(new EventApplicationCanceled(memberId, event.getId(), application.getId(), event.getTitle())); } /** 남의 신청은 없는 것으로 보여야 하므로 조회 단계에서 회원 식별자로 함께 거른다. */ diff --git a/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java b/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java index cf31f10b..0e2ab508 100644 --- a/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java +++ b/core/domain/member/src/main/java/kr/ac/kookmin/stream/member/domain/notification/service/impl/NotificationEventListener.java @@ -20,7 +20,7 @@ class NotificationEventListener { private final NotificationDispatcher notificationDispatcher; - // 알림을 누르면 신청 내역 상세로 가야 하므로 행사가 아니라 신청 ID를 대상으로 준다 + // 신청·취소 알림은 누르면 신청 내역 상세로 가야 하므로 행사가 아니라 신청 ID를 대상으로 준다 @EventListener public void on(EventApplied event) { notificationDispatcher.dispatch( @@ -30,7 +30,7 @@ public void on(EventApplied event) { @EventListener public void on(EventApplicationCanceled event) { notificationDispatcher.dispatch( - NotificationType.EVENT_APPLICATION_CANCELED, List.of(event.eventTitle()), event.eventId(), List.of(event.memberId())); + NotificationType.EVENT_APPLICATION_CANCELED, List.of(event.eventTitle()), event.applicationId(), List.of(event.memberId())); } @EventListener