Skip to content

Commit b0a2248

Browse files
authored
Merge pull request #153 from Modagbul/feat/mission-alarm
fix : 오전 8시 미션 리마인드 알림 로직 고도화
2 parents 8461c1c + 6a8f9cc commit b0a2248

File tree

5 files changed

+89
-20
lines changed

5 files changed

+89
-20
lines changed

src/main/java/com/moing/backend/domain/mission/application/service/MissionRemindAlarmUseCase.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@ public Boolean sendRemindMissionAlarm() {
4444
String title = getTitle(random.nextInt(4));
4545
String message = getMessage(random.nextInt(4));
4646

47+
List<Member> remainMissionPeople = missionArchiveScheduleQueryService.getRemainMissionPeople();
4748

48-
Optional<List<MemberIdAndToken>> remainMissionPeople = missionArchiveScheduleQueryService.getRemainMissionPeople();
49+
Optional<List<MemberIdAndToken>> memberIdAndTokens = mapToMemberAndToken(remainMissionPeople);
50+
Optional<List<MemberIdAndToken>> pushMemberIdAndToken = isPushMemberIdAndToken(remainMissionPeople);
4951

50-
eventPublisher.publishEvent(new MultiFcmEvent(title, message, remainMissionPeople, remainMissionPeople,
52+
eventPublisher.publishEvent(new MultiFcmEvent(title, message, pushMemberIdAndToken, memberIdAndTokens,
5153
"",REMIND_NAME, AlarmType.REMIND, PagePath.MISSION_ALL_PTAH.getValue()));
5254
return true;
5355
}

src/main/java/com/moing/backend/domain/missionArchive/domain/repository/MissionArchiveCustomRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ public interface MissionArchiveCustomRepository {
3333

3434
Boolean findMyArchivesToday(Long memberId,Long missionId);
3535

36+
Optional<List<Member>> findHavingRemainMissionsByQuerydsl() ;
37+
3638
}

src/main/java/com/moing/backend/domain/missionArchive/domain/repository/MissionArchiveCustomRepositoryImpl.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import static com.moing.backend.domain.team.domain.entity.QTeam.team;
4545
import static com.moing.backend.domain.teamMember.domain.entity.QTeamMember.teamMember;
4646
import static javax.swing.Spring.constant;
47+
import static org.springframework.data.jpa.domain.Specification.not;
4748
import static org.springframework.data.jpa.domain.Specification.where;
4849

4950
@Slf4j
@@ -406,6 +407,66 @@ private BooleanExpression createRepeatTypeConditionByState() {
406407
return dateInRange.and(dateInRange);
407408
}
408409

410+
//
411+
// @Query(value = "SELECT distinct COALESCE(tmSub.fcm_token,'undef') as fcmToken, tmSub.member_id as memberId " +
412+
// "FROM (SELECT distinct COALESCE(tm.member_id, 0) AS member_id, t.team_id, me.fcm_token " +
413+
// "FROM mission m " +
414+
// "LEFT JOIN team t ON m.team_id = t.team_id " +
415+
// "LEFT JOIN team_member tm ON t.team_id = tm.team_id AND tm.is_deleted = 'False' " +
416+
// "LEFT JOIN member me on tm.member_id = me.member_id) tmSub " +
417+
// "LEFT JOIN mission m ON NOT (m.status = 'END' OR m.status = 'SUCCESS') and m.team_id = tmSub.team_id " +
418+
// "LEFT JOIN mission_archive ms ON m.mission_id = ms.mission_id and ms.member_id = tmSub.member_id " +
419+
// "GROUP BY tmSub.member_id, m.mission_id, m.number " +
420+
// "HAVING COUNT(ms.mission_archive_id) < m.number", nativeQuery = true
421+
// )
422+
423+
@Override
424+
public Optional<List<Member>> findHavingRemainMissionsByQuerydsl() {
425+
426+
BooleanExpression dateInRange = createRepeatTypeConditionByArchive();
427+
428+
return Optional.ofNullable(queryFactory
429+
.select(teamMember.member).distinct()
430+
.from(teamMember)
431+
.join(mission)
432+
.on(teamMember.team.eq(mission.team),
433+
((mission.status.eq(MissionStatus.ONGOING).or(mission.status.eq(MissionStatus.WAIT)))
434+
.and(mission.type.eq(MissionType.ONCE)))
435+
.or(mission.status.eq(MissionStatus.ONGOING).and(mission.type.eq(MissionType.REPEAT)))
436+
)
437+
.leftJoin(missionArchive)
438+
.on(missionArchive.mission.eq(mission),
439+
missionArchive.member.eq(teamMember.member),
440+
((mission.type.eq(MissionType.REPEAT).and(dateInRange))
441+
.or(mission.type.eq(MissionType.ONCE)))
442+
)
443+
.groupBy(teamMember.member,mission,mission.number)
444+
.having(missionArchive.count().lt(mission.number))
445+
.fetch());
446+
447+
448+
449+
// return Optional.ofNullable(queryFactory
450+
// .select(teamMember.member).distinct()
451+
// .from(teamMember)
452+
// .join(mission)
453+
// .on(
454+
// teamMember.team.eq(mission.team),
455+
// ((((mission.status.eq(MissionStatus.ONGOING).or(mission.status.eq(MissionStatus.WAIT))).and(mission.type.eq(MissionType.ONCE)))
456+
// .or((mission.status.eq(MissionStatus.ONGOING)).and(mission.type.eq(MissionType.REPEAT)))))
457+
// )
458+
// .join(missionArchive)
459+
// .on(
460+
// missionArchive.mission.eq(mission),
461+
// missionArchive.member.eq(teamMember.member),
462+
// (missionArchive.mission.type.eq(MissionType.REPEAT).and(dateInRange)).or(missionArchive.mission.type.eq(MissionType.ONCE))
463+
// )
464+
// .groupBy(teamMember.member,mission,mission.number)
465+
// .having(missionArchive.count().loe(mission.number))
466+
// .fetch()
467+
// );
468+
}
469+
409470

410471

411472
}

src/main/java/com/moing/backend/domain/missionArchive/domain/repository/MissionArchiveRepository.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.moing.backend.domain.missionArchive.domain.repository;
22

33
import com.moing.backend.domain.history.application.dto.response.MemberIdAndToken;
4+
import com.moing.backend.domain.member.domain.entity.Member;
45
import com.moing.backend.domain.mission.domain.entity.constant.MissionStatus;
56
import com.moing.backend.domain.missionArchive.domain.entity.MissionArchive;
67
import com.moing.backend.domain.missionArchive.domain.entity.MissionArchiveStatus;
@@ -78,4 +79,7 @@ public interface MissionArchiveRepository extends JpaRepository<MissionArchive,
7879
// )
7980
// Optional<List<MemberIdAndToken>> findHavingRemainMissions();
8081

81-
}
82+
83+
84+
85+
}

src/main/java/com/moing/backend/domain/missionArchive/domain/service/MissionArchiveScheduleQueryService.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,23 @@ public class MissionArchiveScheduleQueryService {
2222

2323
private final MissionArchiveRepository missionArchiveRepository;
2424

25-
public Optional<List<MemberIdAndToken>> getRemainMissionPeople() {
26-
List<Map<String, Long>> maps = missionArchiveRepository.findHavingRemainMissions().orElseThrow();
27-
28-
return Optional.of(maps.stream()
29-
.map(map -> {
30-
Object memberIdObject = map.get("memberId");
31-
Long memberId = ((BigInteger) memberIdObject).longValue();
32-
33-
Object fcmObject = map.get("fcmToken");
34-
String fcmToken = fcmObject.toString();
35-
36-
return MemberIdAndToken.builder()
37-
.fcmToken(fcmToken)
38-
.memberId(memberId)
39-
.build();
40-
})
41-
.collect(Collectors.toList()));
25+
public List<Member> getRemainMissionPeople() {
26+
return missionArchiveRepository.findHavingRemainMissionsByQuerydsl().orElseThrow();
27+
28+
// return Optional.of(maps.stream()
29+
// .map(map -> {
30+
// Object memberIdObject = map.get("memberId");
31+
// Long memberId = ((BigInteger) memberIdObject).longValue();
32+
//
33+
// Object fcmObject = map.get("fcmToken");
34+
// String fcmToken = fcmObject.toString();
35+
//
36+
// return MemberIdAndToken.builder()
37+
// .fcmToken(fcmToken)
38+
// .memberId(memberId)
39+
// .build();
40+
// })
41+
// .collect(Collectors.toList()));
4242

4343
// return null;
4444

0 commit comments

Comments
 (0)