diff --git a/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java b/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java index 221c28d8..9a66df10 100644 --- a/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java +++ b/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java @@ -4,17 +4,17 @@ import com.moing.backend.domain.member.domain.entity.Member; import com.moing.backend.domain.team.domain.entity.Team; import com.moing.backend.domain.teamMember.domain.service.TeamMemberGetService; -import com.moing.backend.global.config.fcm.dto.request.MultiRequest; -import com.moing.backend.global.config.fcm.service.FcmService; +import com.moing.backend.global.config.fcm.dto.event.FcmEvent; import com.moing.backend.global.response.BaseServiceResponse; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.List; import java.util.Optional; -import static com.moing.backend.global.config.fcm.constant.NewUploadTitle.UPLOAD_NOTICE_NEW_TITLE; +import static com.moing.backend.global.config.fcm.constant.NewNoticeUploadMessage.NEW_NOTICE_UPLOAD_MESSAGE; @Service @RequiredArgsConstructor @@ -22,19 +22,18 @@ public class SendBoardAlarmUseCase { private final TeamMemberGetService teamMemberGetService; - private final FcmService fcmService; + private final ApplicationEventPublisher eventPublisher; public void sendNewUploadAlarm(BaseServiceResponse baseServiceResponse, Board board) { Member member = baseServiceResponse.getMember(); Team team = baseServiceResponse.getTeam(); if (board.isNotice() && member.isNewUploadPush()) { - String title = team.getName() + " " + UPLOAD_NOTICE_NEW_TITLE.getTitle(); - String message = board.getTitle(); + String title = NEW_NOTICE_UPLOAD_MESSAGE.title(team.getName()); + String body = NEW_NOTICE_UPLOAD_MESSAGE.body(board.getTitle()); Optional> fcmTokens = teamMemberGetService.getFcmTokensExceptMe(team.getTeamId(), member.getMemberId()); if (fcmTokens.isPresent() && !fcmTokens.get().isEmpty()) { - MultiRequest toMultiRequest = new MultiRequest(fcmTokens.get(), title, message); - fcmService.sendMultipleDevices(toMultiRequest); + eventPublisher.publishEvent(new FcmEvent(title, body, fcmTokens.get())); } } } diff --git a/src/main/java/com/moing/backend/global/config/fcm/constant/NewNoticeUploadMessage.java b/src/main/java/com/moing/backend/global/config/fcm/constant/NewNoticeUploadMessage.java new file mode 100644 index 00000000..f404ac6e --- /dev/null +++ b/src/main/java/com/moing/backend/global/config/fcm/constant/NewNoticeUploadMessage.java @@ -0,0 +1,22 @@ +package com.moing.backend.global.config.fcm.constant; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum NewNoticeUploadMessage { + + NEW_NOTICE_UPLOAD_MESSAGE("%s에 새로 올라온 공지를 확인하세요!", "%s"); + + private final String title; + private final String body; + + public String title(String teamName) { + return String.format(title, teamName); + } + + public String body(String noticeTitle) { + return String.format(title, noticeTitle); + } +} diff --git a/src/main/java/com/moing/backend/global/config/fcm/service/FcmService.java b/src/main/java/com/moing/backend/global/config/fcm/service/FcmService.java index 74cdb54d..30276df5 100644 --- a/src/main/java/com/moing/backend/global/config/fcm/service/FcmService.java +++ b/src/main/java/com/moing/backend/global/config/fcm/service/FcmService.java @@ -8,6 +8,8 @@ import com.moing.backend.global.config.fcm.exception.NotificationException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.retry.annotation.Backoff; +import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import javax.transaction.Transactional; @@ -23,6 +25,7 @@ public class FcmService { private final FirebaseMessaging firebaseMessaging; + @Retryable(value = FirebaseMessagingException.class, maxAttempts = 3, backoff = @Backoff(delay = 1000)) public SingleResponse sendSingleDevice(SingleRequest toSingleRequest) { Notification notification = Notification.builder() @@ -67,6 +70,7 @@ public SingleResponse sendSingleDevice(SingleRequest toSingleRequest) { } + @Retryable(value = FirebaseMessagingException.class, maxAttempts = 3, backoff = @Backoff(delay = 1000)) public MultiResponse sendMultipleDevices(MultiRequest toMultiRequest) { Notification notification = Notification.builder()