44import grep .neogulcoder .domain .study .Study ;
55import grep .neogulcoder .domain .study .StudyMember ;
66import grep .neogulcoder .domain .study .event .StudyExtensionReminderEvent ;
7+ import grep .neogulcoder .domain .study .repository .StudyMemberQueryRepository ;
78import grep .neogulcoder .domain .study .repository .StudyMemberRepository ;
89import grep .neogulcoder .domain .study .repository .StudyRepository ;
910import lombok .RequiredArgsConstructor ;
1415import java .time .LocalDate ;
1516import java .time .LocalDateTime ;
1617import java .util .List ;
18+ import java .util .Map ;
19+ import java .util .stream .Collectors ;
1720
1821@ Transactional (readOnly = true )
1922@ RequiredArgsConstructor
@@ -24,6 +27,7 @@ public class StudySchedulerService {
2427 private final BuddyEnergyService buddyEnergyService ;
2528 private final StudyMemberRepository studyMemberRepository ;
2629 private final ApplicationEventPublisher eventPublisher ;
30+ private final StudyMemberQueryRepository studyMemberQueryRepository ;
2731
2832 @ Transactional
2933 public void findStudiesEndingIn7Days () {
@@ -43,14 +47,27 @@ public void finalizeStudies() {
4347 LocalDateTime now = LocalDateTime .now ();
4448 List <Study > studiesToBeFinished = studyRepository .findStudiesToBeFinished (now );
4549
50+ Map <Long , List <StudyMember >> memberMap = getActivatedMemberMap (studiesToBeFinished );
51+
4652 for (Study study : studiesToBeFinished ) {
4753 study .finish ();
4854
4955 // 스터디 멤버들 조회 후 버디에너지 업데이트
50- List <StudyMember > members = studyMemberRepository . findFetchStudyByStudyId (study .getId ());
56+ List <StudyMember > members = memberMap . getOrDefault (study .getId (), List . of ());
5157 for (StudyMember member : members ) {
5258 buddyEnergyService .updateEnergyByStudy (member .getUserId (), member .isLeader ());
5359 }
5460 }
5561 }
62+
63+ private Map <Long , List <StudyMember >> getActivatedMemberMap (List <Study > studies ) {
64+ List <Long > studyIds = studies .stream ()
65+ .map (Study ::getId )
66+ .toList ();
67+
68+ List <StudyMember > allActivatedMembers = studyMemberQueryRepository .findActivatedMembersByStudyIds (studyIds );
69+
70+ return allActivatedMembers .stream ()
71+ .collect (Collectors .groupingBy (studyMember -> studyMember .getStudy ().getId ()));
72+ }
5673}
0 commit comments