diff --git a/src/main/java/go/alarm/fcm/service/FCMService.java b/src/main/java/go/alarm/fcm/service/FCMService.java index 2a3985b..169e32d 100644 --- a/src/main/java/go/alarm/fcm/service/FCMService.java +++ b/src/main/java/go/alarm/fcm/service/FCMService.java @@ -1,6 +1,7 @@ package go.alarm.fcm.service; +import go.alarm.group.domain.Group; import go.alarm.user.domain.User; public interface FCMService { @@ -8,7 +9,7 @@ public interface FCMService { void sendAlarms(); User sendAlarmsTest(Long userId); void sendBedTimeAlarms(); - void prick(Long senderId, Long receiverId); + void sendTriggerAlarms(Group group); } diff --git a/src/main/java/go/alarm/fcm/service/FCMServiceImpl.java b/src/main/java/go/alarm/fcm/service/FCMServiceImpl.java index cac02ec..b2b2187 100644 --- a/src/main/java/go/alarm/fcm/service/FCMServiceImpl.java +++ b/src/main/java/go/alarm/fcm/service/FCMServiceImpl.java @@ -16,8 +16,8 @@ import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalTime; +import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -140,8 +140,6 @@ public void prick(Long senderId, Long receiverId) { User sender = userRepository.findById(senderId).get(); User receiver = userRepository.findById(receiverId).get(); - LocalTime now = LocalTime.now().withNano(0); - try { sendNotification( receiver.getFcmToken(), @@ -156,6 +154,34 @@ public void prick(Long senderId, Long receiverId) { } } + @Override + public void sendTriggerAlarms(Group group) { + List userGroups = userGroupRepository.findAllByGroup(group); + + // 방장을 식별 (가장 낮은 Id를 가진 UserGroup) + UserGroup leaderUserGroup = userGroups.stream() + .min(Comparator.comparingLong(UserGroup::getId)) + .orElse(null); + + for (UserGroup userGroup : userGroups) { + if (!userGroup.getIsDisturbBanMode() && !userGroup.equals(leaderUserGroup)) { + User user = userGroup.getUser(); + try { + sendNotification( + user.getFcmToken(), + "수정 알림", + "수정 알림입니다.", + "wakeupalarm.wav", + group.getId() + ); + } catch (FirebaseMessagingException e) { + log.warn("수정 알림 전송을 실패했습니다."); + e.printStackTrace(); + } + } + } + } + /** * FCM으로 알림을 보내줍니다. diff --git a/src/main/java/go/alarm/global/config/SchedulerConfig.java b/src/main/java/go/alarm/global/config/SchedulerConfig.java index 79c63f1..0fef7ad 100644 --- a/src/main/java/go/alarm/global/config/SchedulerConfig.java +++ b/src/main/java/go/alarm/global/config/SchedulerConfig.java @@ -30,7 +30,7 @@ public SchedulerConfig(FCMService fcmService, UserService userService) { @Scheduled(cron = "0 * * * * *") public void scheduleAlarms() { log.warn("현재 시각:" + LocalTime.now()); - fcmService.sendAlarms(); + //fcmService.sendAlarms(); fcmService.sendBedTimeAlarms(); } diff --git a/src/main/java/go/alarm/group/service/GroupServiceImpl.java b/src/main/java/go/alarm/group/service/GroupServiceImpl.java index f4b37c0..e53ef57 100644 --- a/src/main/java/go/alarm/group/service/GroupServiceImpl.java +++ b/src/main/java/go/alarm/group/service/GroupServiceImpl.java @@ -5,6 +5,7 @@ import static go.alarm.global.response.ResponseCode.NOT_FOUND_JOIN_CODE; import static go.alarm.global.response.ResponseCode.NOT_GROUP_HOST; +import go.alarm.fcm.service.FCMService; import go.alarm.global.response.exception.BadRequestException; import go.alarm.group.domain.Group; import go.alarm.group.domain.UserGroup; @@ -31,6 +32,7 @@ public class GroupServiceImpl implements GroupService { private final GroupRepository groupRepository; private final UserRepository userRepository; private final UserGroupRepository userGroupRepository; + private final FCMService fcmService; @Override public Group createGroup(Long userId, GroupRequest request) { @@ -62,11 +64,14 @@ public Group updateGroup(Long userId, Long groupId, GroupRequest request) { updateDayOfWeek(group.getWakeUpDayOfWeek(), request.getDayOfWeekList()); group.setName(request.getName()); group.setMemo(request.getMemo()); + //방해금지모드 + 방장 제외 팀원들에게 알람이 수정되었다는 푸시 알림 보내줌 + // 목적은 앱 진입 유도 -> 이래야만 기상알람 시간 or 요일 or 전부 다 바뀐게 갱신이 됨) + fcmService.sendTriggerAlarms(group); return group; } - public WakeUpDayOfWeek updateDayOfWeek(WakeUpDayOfWeek dayOfWeek, List dayOfWeekList){ + private WakeUpDayOfWeek updateDayOfWeek(WakeUpDayOfWeek dayOfWeek, List dayOfWeekList){ dayOfWeek.resetDayOfWeek(); // 기존 기상 요일 리셋