From cb456dd03ed7b37f5896d8fc3d3ec8d470e16616 Mon Sep 17 00:00:00 2001 From: fnsl1026 Date: Sat, 17 May 2025 18:53:27 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EC=A0=84=EC=B2=B4=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=97=90=EA=B2=8C=20=EC=95=8C=EB=A6=BC=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EB=82=BC=20=EA=B4=80=EB=A0=A8=20=ED=94=BC=EB=93=9C=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EB=94=94=EB=A5=BC=20=EB=8B=B4=EC=9D=80=20Req?= =?UTF-8?q?uest=20Dto=20=EC=9E=91=EC=84=B1=20(#358)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notification/dto/request/PushToAllUsersRequest.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java diff --git a/src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java b/src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java new file mode 100644 index 00000000..8fbe519f --- /dev/null +++ b/src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java @@ -0,0 +1,4 @@ +package com.team.buddyya.notification.dto.request; + +public record PushToAllUsersRequest(long feedId) { +} From be1be0ba3e73e1a385cc5c72e3a600f2adb50c8b Mon Sep 17 00:00:00 2001 From: fnsl1026 Date: Sat, 17 May 2025 18:53:56 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=EC=A0=84=EC=B2=B4=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=97=90=EA=B2=8C=20=EC=95=8C=EB=A6=BC=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EB=82=B4=EB=8A=94=20sendNotificationToAllUser=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84=20(#358)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/NotificationService.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main/java/com/team/buddyya/notification/service/NotificationService.java b/src/main/java/com/team/buddyya/notification/service/NotificationService.java index 0c2b127d..86b0f101 100644 --- a/src/main/java/com/team/buddyya/notification/service/NotificationService.java +++ b/src/main/java/com/team/buddyya/notification/service/NotificationService.java @@ -4,6 +4,9 @@ import com.team.buddyya.chatting.domain.Chatroom; import com.team.buddyya.feed.domain.Comment; import com.team.buddyya.feed.domain.Feed; +import com.team.buddyya.feed.exception.FeedException; +import com.team.buddyya.feed.exception.FeedExceptionType; +import com.team.buddyya.feed.repository.FeedRepository; import com.team.buddyya.match.domain.MatchRequest; import com.team.buddyya.notification.domain.ExpoToken; import com.team.buddyya.notification.domain.RequestNotification; @@ -42,11 +45,14 @@ public class NotificationService { private final ExpoTokenRepository expoTokenRepository; private final FindStudentService findStudentService; + private final FeedRepository feedRepository; private final RestTemplate restTemplate; private final ObjectMapper objectMapper; private static final String TOKEN_SAVE_SUCCESS_MESSAGE = "토큰이 성공적으로 저장되었습니다."; + private static final String BROADCAST_TITLE_EN = "Important notification from Buddyya"; + private static final String FEED_REPLY_TITLE_KR = "새로운 대댓글이 달렸어요!"; private static final String FEED_REPLY_TITLE_EN = "A new reply has been added!"; @@ -217,6 +223,34 @@ private String getCommentReplyNotificationTitle(boolean isKorean) { return isKorean ? FEED_REPLY_TITLE_KR : FEED_REPLY_TITLE_EN; } + public void sendNotificationToAllUser(long feedId) { + Feed feed = feedRepository.findById(feedId) + .orElseThrow(() -> new FeedException(FeedExceptionType.FEED_NOT_FOUND)); + String body = feed.getTitle(); + Map data = Map.of( + "feedId", feed.getId(), + "type", "FEED" + ); + List tokens = expoTokenRepository.findAll(); + for (ExpoToken expoToken : tokens) { + try { + String token = expoToken.getToken(); + if (token == null || token.isBlank()) continue; + RequestNotification notification = RequestNotification.builder() + .to(token) + .title(BROADCAST_TITLE_EN) + .body(body) + .data(data) + .build(); + sendToExpo(notification); + } catch (NotificationException e) { + log.warn("전체 유저 알림 전송 실패 - studentId: {}, error: {}", + expoToken.getStudent().getId(), + e.exceptionType().errorMessage()); + } + } + } + public void sendCommentNotification(Long writerId, Feed feed, String commentContent) { boolean isFeedOwner = feed.isFeedOwner(writerId); if (!isFeedOwner) { From 34499eb0385fbff25003a2890ba737b67fe3c0f7 Mon Sep 17 00:00:00 2001 From: fnsl1026 Date: Sat, 17 May 2025 18:54:14 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=EC=A0=84=EC=B2=B4=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=97=90=EA=B2=8C=20=EC=95=8C=EB=A6=BC=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EB=82=B4=EB=8A=94=20sendNotificationToAllUser=20API?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20(#358)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notification/controller/NotificationController.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/team/buddyya/notification/controller/NotificationController.java b/src/main/java/com/team/buddyya/notification/controller/NotificationController.java index 65306cb7..850b4600 100644 --- a/src/main/java/com/team/buddyya/notification/controller/NotificationController.java +++ b/src/main/java/com/team/buddyya/notification/controller/NotificationController.java @@ -1,6 +1,7 @@ package com.team.buddyya.notification.controller; import com.team.buddyya.auth.domain.CustomUserDetails; +import com.team.buddyya.notification.dto.request.PushToAllUsersRequest; import com.team.buddyya.notification.dto.request.SaveTokenRequest; import com.team.buddyya.notification.dto.response.SaveTokenResponse; import com.team.buddyya.notification.service.NotificationService; @@ -21,4 +22,10 @@ public ResponseEntity registerPushToken(@AuthenticationPrinci @RequestBody SaveTokenRequest request) { return ResponseEntity.ok(notificationService.savePushToken(userDetails.getStudentInfo().id(), request.token())); } + + @PostMapping("/send-to-all") + public ResponseEntity sendNotificationToAllUser(@RequestBody PushToAllUsersRequest request) { + notificationService.sendNotificationToAllUser(request.feedId()); + return ResponseEntity.noContent().build(); + } } From 67e49936914d42c4a7eadeeef99c03f58eff3b94 Mon Sep 17 00:00:00 2001 From: fnsl1026 Date: Sat, 17 May 2025 19:18:49 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20=EC=95=8C=EB=A6=BC=20title?= =?UTF-8?q?=EA=B3=BC=20body=EB=8A=94=20request=20DTO=EB=A1=9C=20=EB=B0=9B?= =?UTF-8?q?=EC=9D=80=EB=8C=80=EB=A1=9C=20=EC=84=A4=EC=A0=95=20(#358)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/NotificationController.java | 2 +- .../dto/request/PushToAllUsersRequest.java | 2 +- .../notification/service/NotificationService.java | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/team/buddyya/notification/controller/NotificationController.java b/src/main/java/com/team/buddyya/notification/controller/NotificationController.java index 850b4600..2632be52 100644 --- a/src/main/java/com/team/buddyya/notification/controller/NotificationController.java +++ b/src/main/java/com/team/buddyya/notification/controller/NotificationController.java @@ -25,7 +25,7 @@ public ResponseEntity registerPushToken(@AuthenticationPrinci @PostMapping("/send-to-all") public ResponseEntity sendNotificationToAllUser(@RequestBody PushToAllUsersRequest request) { - notificationService.sendNotificationToAllUser(request.feedId()); + notificationService.sendNotificationToAllUser(request); return ResponseEntity.noContent().build(); } } diff --git a/src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java b/src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java index 8fbe519f..3a1c84d6 100644 --- a/src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java +++ b/src/main/java/com/team/buddyya/notification/dto/request/PushToAllUsersRequest.java @@ -1,4 +1,4 @@ package com.team.buddyya.notification.dto.request; -public record PushToAllUsersRequest(long feedId) { +public record PushToAllUsersRequest(long feedId, String title, String body) { } diff --git a/src/main/java/com/team/buddyya/notification/service/NotificationService.java b/src/main/java/com/team/buddyya/notification/service/NotificationService.java index 86b0f101..ec0cfdb6 100644 --- a/src/main/java/com/team/buddyya/notification/service/NotificationService.java +++ b/src/main/java/com/team/buddyya/notification/service/NotificationService.java @@ -10,6 +10,7 @@ import com.team.buddyya.match.domain.MatchRequest; import com.team.buddyya.notification.domain.ExpoToken; import com.team.buddyya.notification.domain.RequestNotification; +import com.team.buddyya.notification.dto.request.PushToAllUsersRequest; import com.team.buddyya.notification.dto.response.SaveTokenResponse; import com.team.buddyya.notification.exception.NotificationException; import com.team.buddyya.notification.exception.NotificationExceptionType; @@ -51,8 +52,6 @@ public class NotificationService { private static final String TOKEN_SAVE_SUCCESS_MESSAGE = "토큰이 성공적으로 저장되었습니다."; - private static final String BROADCAST_TITLE_EN = "Important notification from Buddyya"; - private static final String FEED_REPLY_TITLE_KR = "새로운 대댓글이 달렸어요!"; private static final String FEED_REPLY_TITLE_EN = "A new reply has been added!"; @@ -223,10 +222,11 @@ private String getCommentReplyNotificationTitle(boolean isKorean) { return isKorean ? FEED_REPLY_TITLE_KR : FEED_REPLY_TITLE_EN; } - public void sendNotificationToAllUser(long feedId) { - Feed feed = feedRepository.findById(feedId) + public void sendNotificationToAllUser(PushToAllUsersRequest request) { + Feed feed = feedRepository.findById(request.feedId()) .orElseThrow(() -> new FeedException(FeedExceptionType.FEED_NOT_FOUND)); - String body = feed.getTitle(); + String title = request.title(); + String body = request.body(); Map data = Map.of( "feedId", feed.getId(), "type", "FEED" @@ -238,7 +238,7 @@ public void sendNotificationToAllUser(long feedId) { if (token == null || token.isBlank()) continue; RequestNotification notification = RequestNotification.builder() .to(token) - .title(BROADCAST_TITLE_EN) + .title(title) .body(body) .data(data) .build();