diff --git a/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java b/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java index 0fd19fe0..3ed5f384 100644 --- a/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java +++ b/src/main/java/com/moing/backend/domain/board/application/service/SendBoardAlarmUseCase.java @@ -2,6 +2,8 @@ import com.moing.backend.domain.board.domain.entity.Board; 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; @@ -35,8 +37,9 @@ public void sendNewUploadAlarm(BaseServiceResponse baseServiceResponse, Board bo if (board.isNotice()) { String title = NEW_NOTICE_UPLOAD_MESSAGE.title(team.getName()); String body = NEW_NOTICE_UPLOAD_MESSAGE.body(board.getTitle()); - Optional> memberIdAndTokensByPush = teamMemberGetService.getNewUploadPushInfo(team.getTeamId(), member.getMemberId()); - Optional> memberIdAndTokensBySave = teamMemberGetService.getNewUploadSaveInfo(team.getTeamId(), member.getMemberId()); + Optional> newUploadInfos=teamMemberGetService.getNewUploadInfo(team.getTeamId(), member.getMemberId()); + Optional> memberIdAndTokensByPush = AlarmHistoryMapper.getNewUploadPushInfo(newUploadInfos); + Optional> memberIdAndTokensBySave = AlarmHistoryMapper.getNewUploadSaveInfo(newUploadInfos); // 알림 보내기 eventPublisher.publishEvent(new MultiFcmEvent(title, body, memberIdAndTokensByPush, memberIdAndTokensBySave, createIdInfo(team.getTeamId(), board.getBoardId()), team.getName(), AlarmType.NEW_UPLOAD, PagePath.NOTICE_PATH.getValue())); } diff --git a/src/main/java/com/moing/backend/domain/history/application/dto/response/NewUploadInfo.java b/src/main/java/com/moing/backend/domain/history/application/dto/response/NewUploadInfo.java new file mode 100644 index 00000000..5b5e2967 --- /dev/null +++ b/src/main/java/com/moing/backend/domain/history/application/dto/response/NewUploadInfo.java @@ -0,0 +1,19 @@ +package com.moing.backend.domain.history.application.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class NewUploadInfo { + + private String fcmToken; + private Long memberId; + private boolean isNewUploadPush; + private boolean isSignOut; + +} diff --git a/src/main/java/com/moing/backend/domain/history/application/mapper/AlarmHistoryMapper.java b/src/main/java/com/moing/backend/domain/history/application/mapper/AlarmHistoryMapper.java index 21938d0d..e00f121e 100644 --- a/src/main/java/com/moing/backend/domain/history/application/mapper/AlarmHistoryMapper.java +++ b/src/main/java/com/moing/backend/domain/history/application/mapper/AlarmHistoryMapper.java @@ -1,6 +1,7 @@ package com.moing.backend.domain.history.application.mapper; 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.domain.entity.AlarmHistory; import com.moing.backend.domain.history.domain.entity.AlarmType; import lombok.RequiredArgsConstructor; @@ -8,6 +9,7 @@ import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @Component @@ -54,4 +56,22 @@ public List getAlarmHistories(String idInfo, List memberIds, .collect(Collectors.toList()); } + public static Optional> getNewUploadSaveInfo(Optional> optionalNewUploadInfos) { + return optionalNewUploadInfos.map(newUploadInfos -> + newUploadInfos.stream() + .map(info -> new MemberIdAndToken(info.getFcmToken(), info.getMemberId())) + .collect(Collectors.toList()) + ); + } + + public static Optional> getNewUploadPushInfo(Optional> optionalNewUploadInfos) { + return optionalNewUploadInfos.map(newUploadInfos -> + newUploadInfos.stream() + .filter(NewUploadInfo::isNewUploadPush) + .filter(info -> !info.isSignOut()) + .map(info -> new MemberIdAndToken(info.getFcmToken(), info.getMemberId())) + .collect(Collectors.toList()) + ); + } + } diff --git a/src/main/java/com/moing/backend/domain/mission/application/service/SendMissionCreateAlarmUseCase.java b/src/main/java/com/moing/backend/domain/mission/application/service/SendMissionCreateAlarmUseCase.java index 5f4c7db7..aabe793f 100644 --- a/src/main/java/com/moing/backend/domain/mission/application/service/SendMissionCreateAlarmUseCase.java +++ b/src/main/java/com/moing/backend/domain/mission/application/service/SendMissionCreateAlarmUseCase.java @@ -1,6 +1,8 @@ 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; @@ -36,8 +38,10 @@ public void sendNewMissionUploadAlarm(Member member, Mission mission) { String type = mission.getType().toString(); String status = mission.getStatus().toString(); - Optional> memberIdAndTokensByPush = teamMemberGetService.getNewUploadPushInfo(team.getTeamId(), member.getMemberId()); - Optional> memberIdAndTokensBySave = teamMemberGetService.getNewUploadSaveInfo(team.getTeamId(), member.getMemberId()); + Optional> newUploadInfos=teamMemberGetService.getNewUploadInfo(team.getTeamId(), member.getMemberId()); + + 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())); } diff --git a/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepository.java b/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepository.java index 15028f4f..b321c2cf 100644 --- a/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepository.java +++ b/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepository.java @@ -1,6 +1,7 @@ package com.moing.backend.domain.teamMember.domain.repository; 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.member.domain.entity.Member; import com.moing.backend.domain.team.application.dto.response.TeamMemberInfo; import com.moing.backend.domain.teamMember.domain.entity.TeamMember; @@ -10,10 +11,7 @@ public interface TeamMemberCustomRepository { List findMemberIdsByTeamId(Long teamId); - Optional> findNewUploadPushInfo(Long teamId, Long memberId); - Optional> findNewUploadSaveInfo(Long teamId, Long memberId); - Optional> findRemindPushInfo(Long teamId, Long memberId); - Optional> findRemindSaveInfo(Long teamId, Long memberId); + Optional> findNewUploadInfo(Long teamId, Long memberId); Optional> findFcmTokensByTeamIdAndMemberId(Long teamId, Long memberId); List findTeamMemberInfoByTeamId(Long teamId); List findTeamMemberByMemberId(Long memberId); diff --git a/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepositoryImpl.java b/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepositoryImpl.java index 41bf94b2..dcc7f39b 100644 --- a/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepositoryImpl.java +++ b/src/main/java/com/moing/backend/domain/teamMember/domain/repository/TeamMemberCustomRepositoryImpl.java @@ -1,6 +1,7 @@ package com.moing.backend.domain.teamMember.domain.repository; 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.team.application.dto.response.QTeamMemberInfo; import com.moing.backend.domain.team.application.dto.response.TeamMemberInfo; import com.moing.backend.domain.teamMember.domain.entity.TeamMember; @@ -32,55 +33,12 @@ public List findMemberIdsByTeamId(Long teamId) { } @Override - public Optional> findNewUploadPushInfo(Long teamId, Long memberId) { - List result = queryFactory.select(Projections.constructor(MemberIdAndToken.class, + public Optional> findNewUploadInfo(Long teamId, Long memberId) { + List result = queryFactory.select(Projections.constructor(NewUploadInfo.class, teamMember.member.fcmToken, - teamMember.member.memberId)) - .from(teamMember) - .where(teamMember.team.teamId.eq(teamId) - .and(teamMember.member.isNewUploadPush.eq(true)) - .and(teamMember.member.isSignOut.eq(false)) - .and(teamMember.member.memberId.ne(memberId)) - .and(teamMember.isDeleted.eq(false))) - .fetch(); - - return result.isEmpty() ? Optional.empty() : Optional.of(result); - } - - @Override - public Optional> findNewUploadSaveInfo(Long teamId, Long memberId) { - List result = queryFactory.select(Projections.constructor(MemberIdAndToken.class, - teamMember.member.fcmToken, - teamMember.member.memberId)) - .from(teamMember) - .where(teamMember.team.teamId.eq(teamId) - .and(teamMember.member.memberId.ne(memberId)) - .and(teamMember.isDeleted.eq(false))) - .fetch(); - - return result.isEmpty() ? Optional.empty() : Optional.of(result); - } - @Override - public Optional> findRemindPushInfo(Long teamId, Long memberId) { - List result = queryFactory.select(Projections.constructor(MemberIdAndToken.class, - teamMember.member.fcmToken, - teamMember.member.memberId)) - .from(teamMember) - .where(teamMember.team.teamId.eq(teamId) - .and(teamMember.member.isRemindPush.eq(true)) - .and(teamMember.member.isSignOut.eq(false)) - .and(teamMember.member.memberId.ne(memberId)) - .and(teamMember.isDeleted.eq(false))) - .fetch(); - - return result.isEmpty() ? Optional.empty() : Optional.of(result); - } - - @Override - public Optional> findRemindSaveInfo(Long teamId, Long memberId) { - List result = queryFactory.select(Projections.constructor(MemberIdAndToken.class, - teamMember.member.fcmToken, - teamMember.member.memberId)) + teamMember.member.memberId, + teamMember.member.isNewUploadPush, + teamMember.member.isSignOut)) .from(teamMember) .where(teamMember.team.teamId.eq(teamId) .and(teamMember.member.memberId.ne(memberId)) diff --git a/src/main/java/com/moing/backend/domain/teamMember/domain/service/TeamMemberGetService.java b/src/main/java/com/moing/backend/domain/teamMember/domain/service/TeamMemberGetService.java index 87d6af25..00d065a3 100644 --- a/src/main/java/com/moing/backend/domain/teamMember/domain/service/TeamMemberGetService.java +++ b/src/main/java/com/moing/backend/domain/teamMember/domain/service/TeamMemberGetService.java @@ -1,6 +1,7 @@ package com.moing.backend.domain.teamMember.domain.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.member.domain.entity.Member; import com.moing.backend.domain.team.application.dto.response.TeamMemberInfo; import com.moing.backend.domain.team.domain.entity.Team; @@ -38,20 +39,9 @@ public List getNotDeletedTeamMember(Long memberId){ return teamMemberRepository.findTeamMemberByMemberId(memberId); } - public Optional> getNewUploadPushInfo(Long teamId, Long memberId) { - return teamMemberRepository.findNewUploadPushInfo(teamId, memberId); + public Optional> getNewUploadInfo(Long teamId, Long memberId) { + return teamMemberRepository.findNewUploadInfo(teamId, memberId); } - public Optional> getNewUploadSaveInfo(Long teamId, Long memberId) { - return teamMemberRepository.findNewUploadSaveInfo(teamId, memberId); - } - - public Optional> getRemindPushInfo(Long teamId, Long memberId) { - return teamMemberRepository.findRemindPushInfo(teamId, memberId); - } - - public Optional> getRemindSaveInfo(Long teamId, Long memberId) { - return teamMemberRepository.findRemindSaveInfo(teamId, memberId); - } }