|
| 1 | +package com.moing.backend.domain.missionArchive.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.domain.missionArchive.application.service.MissionArchiveCreateMessage.CREATOR_CREATE_MISSION_ARCHIVE; |
| 25 | +import static com.moing.backend.domain.missionArchive.application.service.MissionArchiveCreateMessage.TEAM_AND_TITLE; |
| 26 | +import static com.moing.backend.global.config.fcm.constant.NewMissionTitle.NEW_SINGLE_MISSION_COMING; |
| 27 | + |
| 28 | +@Service |
| 29 | +@Transactional |
| 30 | +@RequiredArgsConstructor |
| 31 | +public class SendMissionArchiveCreateAlarmUseCase { |
| 32 | + |
| 33 | + private final TeamMemberGetService teamMemberGetService; |
| 34 | + private final ApplicationEventPublisher eventPublisher; |
| 35 | + |
| 36 | + public void sendNewMissionArchiveUploadAlarm(Member member, Mission mission) { |
| 37 | + Team team = mission.getTeam(); |
| 38 | + |
| 39 | + String title = CREATOR_CREATE_MISSION_ARCHIVE.to(member.getNickName()); |
| 40 | + String message = TEAM_AND_TITLE.teamAndTitle(team.getName(),mission.getTitle()); |
| 41 | + |
| 42 | + |
| 43 | + Optional<List<NewUploadInfo>> newUploadInfos=teamMemberGetService.getNewUploadInfo(team.getTeamId(), member.getMemberId()); |
| 44 | + |
| 45 | + Optional<List<MemberIdAndToken>> memberIdAndTokensByPush = AlarmHistoryMapper.getNewUploadPushInfo(newUploadInfos); |
| 46 | + Optional<List<MemberIdAndToken>> memberIdAndTokensBySave = AlarmHistoryMapper.getNewUploadSaveInfo(newUploadInfos); |
| 47 | + // 알림 보내기 |
| 48 | + 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())); |
| 49 | + } |
| 50 | + |
| 51 | + private String createIdInfo(Long teamId, Long missionId,MissionType type, MissionStatus status) { |
| 52 | + JSONObject jo = new JSONObject(); |
| 53 | + jo.put("isRepeated", type.equals(MissionType.REPEAT)); |
| 54 | + jo.put("teamId", teamId); |
| 55 | + jo.put("missionId", missionId); |
| 56 | + jo.put("status", status.name()); |
| 57 | + return jo.toJSONString(); |
| 58 | + } |
| 59 | +} |
| 60 | + |
0 commit comments