|
| 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 | + |
0 commit comments