From f96edfde711e2e02ec3d5d31652d2d0153f9abda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=20=EC=8A=B9=20=EC=97=B0?= <53565255+seungyeonnnnnni@users.noreply.github.com> Date: Mon, 8 Jan 2024 01:57:07 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EB=B0=98=EB=B3=B5=EB=AF=B8=EC=85=98?= =?UTF-8?q?=20=EC=8B=9C=EC=9E=91=20=EC=95=8C=EB=A6=BC=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SendMissionStartAlarmUseCase.java | 59 +++++++++++++++++++ .../service/MissionStateScheduleUseCase.java | 9 ++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/moing/backend/domain/mission/application/service/SendMissionStartAlarmUseCase.java diff --git a/src/main/java/com/moing/backend/domain/mission/application/service/SendMissionStartAlarmUseCase.java b/src/main/java/com/moing/backend/domain/mission/application/service/SendMissionStartAlarmUseCase.java new file mode 100644 index 00000000..be5ddebd --- /dev/null +++ b/src/main/java/com/moing/backend/domain/mission/application/service/SendMissionStartAlarmUseCase.java @@ -0,0 +1,59 @@ +package com.moing.backend.domain.mission.application.service; + +import com.moing.backend.domain.history.application.dto.response.MemberIdAndToken; +import com.moing.backend.domain.history.application.dto.response.NewUploadInfo; +import com.moing.backend.domain.history.application.mapper.AlarmHistoryMapper; +import com.moing.backend.domain.history.domain.entity.AlarmType; +import com.moing.backend.domain.history.domain.entity.PagePath; +import com.moing.backend.domain.member.domain.entity.Member; +import com.moing.backend.domain.mission.domain.entity.Mission; +import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus; +import com.moing.backend.domain.mission.domain.entity.constant.MissionType; +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.event.MultiFcmEvent; +import lombok.RequiredArgsConstructor; +import net.minidev.json.JSONObject; +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.NewMissionTitle.NEW_REPEAT_MISSION_COMING; +import static com.moing.backend.global.config.fcm.constant.NewMissionTitle.NEW_SINGLE_MISSION_COMING; + +@Service +@Transactional +@RequiredArgsConstructor +public class SendMissionStartAlarmUseCase { + + private final TeamMemberGetService teamMemberGetService; + private final ApplicationEventPublisher eventPublisher; + + public void sendRepeatMissionStartAlarm(Mission mission) { + Team team = mission.getTeam(); + String title = team.getName() + " " + NEW_REPEAT_MISSION_COMING.getTitle(); + String message = mission.getTitle(); + String type = mission.getType().toString(); + String status = mission.getStatus().toString(); + + Optional> newUploadInfos=teamMemberGetService.getNewUploadInfo(team.getTeamId(), 0L); + + Optional> memberIdAndTokensByPush = AlarmHistoryMapper.getNewUploadPushInfo(newUploadInfos); + Optional> memberIdAndTokensBySave = AlarmHistoryMapper.getNewUploadSaveInfo(newUploadInfos); + // 알림 보내기 + eventPublisher.publishEvent(new MultiFcmEvent(title, message, memberIdAndTokensByPush, memberIdAndTokensBySave, createIdInfo(team.getTeamId(), mission.getId(),mission.getType(),mission.getStatus()), team.getName(), AlarmType.NEW_UPLOAD, PagePath.MISSION_PATH.getValue())); + } + + private String createIdInfo(Long teamId, Long missionId,MissionType type, MissionStatus status) { + JSONObject jo = new JSONObject(); + jo.put("isRepeated", type.equals(MissionType.REPEAT)); + jo.put("teamId", teamId); + jo.put("missionId", missionId); + jo.put("status", status.name()); + return jo.toJSONString(); + } +} + diff --git a/src/main/java/com/moing/backend/domain/missionState/application/service/MissionStateScheduleUseCase.java b/src/main/java/com/moing/backend/domain/missionState/application/service/MissionStateScheduleUseCase.java index f0d3bfd3..97707aaa 100644 --- a/src/main/java/com/moing/backend/domain/missionState/application/service/MissionStateScheduleUseCase.java +++ b/src/main/java/com/moing/backend/domain/missionState/application/service/MissionStateScheduleUseCase.java @@ -1,6 +1,7 @@ package com.moing.backend.domain.missionState.application.service; import com.moing.backend.domain.mission.application.service.MissionRemindAlarmUseCase; +import com.moing.backend.domain.mission.application.service.SendMissionStartAlarmUseCase; import com.moing.backend.domain.mission.domain.entity.Mission; import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus; import com.moing.backend.domain.mission.domain.service.MissionQueryService; @@ -38,6 +39,8 @@ public class MissionStateScheduleUseCase { private final TeamScoreLogicUseCase teamScoreLogicUseCase; + private final SendMissionStartAlarmUseCase sendMissionStartAlarmUseCase; + /** * 반복미션 마감 * 일요일 마감 루틴 @@ -80,7 +83,11 @@ public void singleMissionEndRoutine() { public void RepeatMissionStart() { List startMission = missionQueryService.findRepeatMissionByStatus(MissionStatus.WAIT); startMission.forEach( - mission -> mission.updateStatus(MissionStatus.ONGOING) + mission -> { + // 미션 시작 알림 + sendMissionStartAlarmUseCase.sendRepeatMissionStartAlarm(mission); + mission.updateStatus(MissionStatus.ONGOING); + } ); }