From ff6121b5fd9fab0d0b931600650de70b71c81410 Mon Sep 17 00:00:00 2001 From: Chaewon Lee Date: Sun, 27 Jul 2025 00:30:24 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20WebPush=20=EC=83=81=EB=8C=80?= =?UTF-8?q?=EB=B0=A9=20=EB=A7=A4=EC=B9=AD=20=EA=B2=B0=EC=A0=95=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../channel/service/AsyncChannelService.java | 4 ++++ .../global/webpush/service/FCMService.java | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/hertz-be/src/main/java/com/hertz/hertz_be/domain/channel/service/AsyncChannelService.java b/hertz-be/src/main/java/com/hertz/hertz_be/domain/channel/service/AsyncChannelService.java index 5f39ac2c..b89acecf 100644 --- a/hertz-be/src/main/java/com/hertz/hertz_be/domain/channel/service/AsyncChannelService.java +++ b/hertz-be/src/main/java/com/hertz/hertz_be/domain/channel/service/AsyncChannelService.java @@ -12,6 +12,7 @@ import com.hertz.hertz_be.global.common.NewResponseCode; import com.hertz.hertz_be.domain.user.repository.UserRepository; import com.hertz.hertz_be.global.exception.BusinessException; +import com.hertz.hertz_be.global.webpush.service.FCMService; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; @@ -53,6 +54,7 @@ public class AsyncChannelService { private final UserRepository userRepository; private final AlarmService alarmService; private final SignalRoomRepository signalRoomRepository; + private final FCMService fcmService; @Async public void notifyMatchingConverted(SignalRoom room) { @@ -155,8 +157,10 @@ public void notifyMatchingResultToPartner(SignalRoom room, Long userId, Matching if (partnerStatus == MatchingStatus.SIGNAL) { sseChannelService.notifyMatchingConfirmedToPartner(latestRoomForm, user, partner); + fcmService.notifyMatchingConfirmedToPartner(latestRoomForm, user, partner); } else { sseChannelService.notifyMatchingResultToPartner(latestRoomForm, user, partner, matchingStatus); + fcmService.notifyMatchingResultToPartner(latestRoomForm, user, partner, matchingStatus); } } diff --git a/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java b/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java index fc0fff81..7e07e1fb 100644 --- a/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java +++ b/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java @@ -7,6 +7,8 @@ import com.google.firebase.messaging.FirebaseMessaging; import com.google.firebase.messaging.Message; import com.google.firebase.messaging.WebpushConfig; +import com.hertz.hertz_be.domain.channel.entity.SignalRoom; +import com.hertz.hertz_be.domain.channel.entity.enums.MatchingStatus; import com.hertz.hertz_be.domain.user.entity.User; import com.hertz.hertz_be.domain.user.repository.UserRepository; import com.hertz.hertz_be.domain.user.responsecode.UserResponseCode; @@ -99,4 +101,26 @@ public boolean shouldNotify(FCMEventType eventType, Long channelRoomId) { return notifiedMatchingRooms.get(eventType).add(channelRoomId); } + public void notifyMatchingConfirmedToPartner(SignalRoom room, User user, User partner) { + if(!shouldNotify(FCMEventType.MATCHING_DECIDED_BY_PARTNER, room.getId())) { + String title = "매칭 성공!"; + String content = partner.getNickname() + "님 과의 매칭에 성공했어요!"; + + sendWebPush(user.getId(), title, content); + } + } + + public void notifyMatchingResultToPartner(SignalRoom room, User user, User partner, MatchingStatus matchingStatus) { + if (matchingStatus == MatchingStatus.MATCHED) { + String title = "매칭 수락 알림"; + String content = user.getNickname() + "님이 매칭을 수락했어요!"; + sendWebPush(partner.getId(), title, content); + + } else { + String title = "매칭 거절 알림"; + String content = user.getNickname() + "님이 매칭을 거절했어요."; + sendWebPush(partner.getId(), title, content); + } + } + } \ No newline at end of file From ecc728e5cd96363c874705960b5e4319072c81ad Mon Sep 17 00:00:00 2001 From: Chaewon Lee Date: Sun, 27 Jul 2025 20:44:22 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20WebPush=20=EC=83=81=EB=8C=80?= =?UTF-8?q?=EB=B0=A9=20=EB=A7=A4=EC=B9=AD=20=EA=B2=B0=EC=A0=95=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EA=B8=B0=EB=8A=A5=20=EB=82=B4=20=EB=AC=B8=EA=B5=AC?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hertz/hertz_be/global/webpush/service/FCMService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java b/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java index 7e07e1fb..d8fa7927 100644 --- a/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java +++ b/hertz-be/src/main/java/com/hertz/hertz_be/global/webpush/service/FCMService.java @@ -103,8 +103,8 @@ public boolean shouldNotify(FCMEventType eventType, Long channelRoomId) { public void notifyMatchingConfirmedToPartner(SignalRoom room, User user, User partner) { if(!shouldNotify(FCMEventType.MATCHING_DECIDED_BY_PARTNER, room.getId())) { - String title = "매칭 성공!"; - String content = partner.getNickname() + "님 과의 매칭에 성공했어요!"; + String title = partner.getNickname() + "님이 매칭을 결정했어요."; + String content = "나도 마음을 정해볼까요?"; sendWebPush(user.getId(), title, content); }