Skip to content

Commit f96edfd

Browse files
committed
feat : 반복미션 시작 알림 기능 추가
1 parent 6d17b51 commit f96edfd

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.moing.backend.domain.mission.application.service;
2+
3+
import com.moing.backend.domain.history.application.dto.response.MemberIdAndToken;
4+
import com.moing.backend.domain.history.application.dto.response.NewUploadInfo;
5+
import com.moing.backend.domain.history.application.mapper.AlarmHistoryMapper;
6+
import com.moing.backend.domain.history.domain.entity.AlarmType;
7+
import com.moing.backend.domain.history.domain.entity.PagePath;
8+
import com.moing.backend.domain.member.domain.entity.Member;
9+
import com.moing.backend.domain.mission.domain.entity.Mission;
10+
import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus;
11+
import com.moing.backend.domain.mission.domain.entity.constant.MissionType;
12+
import com.moing.backend.domain.team.domain.entity.Team;
13+
import com.moing.backend.domain.teamMember.domain.service.TeamMemberGetService;
14+
import com.moing.backend.global.config.fcm.dto.event.MultiFcmEvent;
15+
import lombok.RequiredArgsConstructor;
16+
import net.minidev.json.JSONObject;
17+
import org.springframework.context.ApplicationEventPublisher;
18+
import org.springframework.stereotype.Service;
19+
20+
import javax.transaction.Transactional;
21+
import java.util.List;
22+
import java.util.Optional;
23+
24+
import static com.moing.backend.global.config.fcm.constant.NewMissionTitle.NEW_REPEAT_MISSION_COMING;
25+
import static com.moing.backend.global.config.fcm.constant.NewMissionTitle.NEW_SINGLE_MISSION_COMING;
26+
27+
@Service
28+
@Transactional
29+
@RequiredArgsConstructor
30+
public class SendMissionStartAlarmUseCase {
31+
32+
private final TeamMemberGetService teamMemberGetService;
33+
private final ApplicationEventPublisher eventPublisher;
34+
35+
public void sendRepeatMissionStartAlarm(Mission mission) {
36+
Team team = mission.getTeam();
37+
String title = team.getName() + " " + NEW_REPEAT_MISSION_COMING.getTitle();
38+
String message = mission.getTitle();
39+
String type = mission.getType().toString();
40+
String status = mission.getStatus().toString();
41+
42+
Optional<List<NewUploadInfo>> newUploadInfos=teamMemberGetService.getNewUploadInfo(team.getTeamId(), 0L);
43+
44+
Optional<List<MemberIdAndToken>> memberIdAndTokensByPush = AlarmHistoryMapper.getNewUploadPushInfo(newUploadInfos);
45+
Optional<List<MemberIdAndToken>> memberIdAndTokensBySave = AlarmHistoryMapper.getNewUploadSaveInfo(newUploadInfos);
46+
// 알림 보내기
47+
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()));
48+
}
49+
50+
private String createIdInfo(Long teamId, Long missionId,MissionType type, MissionStatus status) {
51+
JSONObject jo = new JSONObject();
52+
jo.put("isRepeated", type.equals(MissionType.REPEAT));
53+
jo.put("teamId", teamId);
54+
jo.put("missionId", missionId);
55+
jo.put("status", status.name());
56+
return jo.toJSONString();
57+
}
58+
}
59+

src/main/java/com/moing/backend/domain/missionState/application/service/MissionStateScheduleUseCase.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.moing.backend.domain.missionState.application.service;
22

33
import com.moing.backend.domain.mission.application.service.MissionRemindAlarmUseCase;
4+
import com.moing.backend.domain.mission.application.service.SendMissionStartAlarmUseCase;
45
import com.moing.backend.domain.mission.domain.entity.Mission;
56
import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus;
67
import com.moing.backend.domain.mission.domain.service.MissionQueryService;
@@ -38,6 +39,8 @@ public class MissionStateScheduleUseCase {
3839

3940
private final TeamScoreLogicUseCase teamScoreLogicUseCase;
4041

42+
private final SendMissionStartAlarmUseCase sendMissionStartAlarmUseCase;
43+
4144
/**
4245
* 반복미션 마감
4346
* 일요일 마감 루틴
@@ -80,7 +83,11 @@ public void singleMissionEndRoutine() {
8083
public void RepeatMissionStart() {
8184
List<Mission> startMission = missionQueryService.findRepeatMissionByStatus(MissionStatus.WAIT);
8285
startMission.forEach(
83-
mission -> mission.updateStatus(MissionStatus.ONGOING)
86+
mission -> {
87+
// 미션 시작 알림
88+
sendMissionStartAlarmUseCase.sendRepeatMissionStartAlarm(mission);
89+
mission.updateStatus(MissionStatus.ONGOING);
90+
}
8491
);
8592
}
8693

0 commit comments

Comments
 (0)