Skip to content

Commit 2576f1d

Browse files
authored
Merge pull request #128 from prgrms-web-devcourse-final-project/refactor
[FIX]: 게스트 정리 스케줄러 로직 수정
2 parents 80df046 + 71535da commit 2576f1d

File tree

1 file changed

+40
-11
lines changed

1 file changed

+40
-11
lines changed

back/src/main/java/com/back/global/scheduler/GuestCleanupScheduler.java

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.back.global.scheduler;
22

3+
import com.back.domain.node.entity.BaseLine;
4+
import com.back.domain.node.repository.BaseLineRepository;
5+
import com.back.domain.node.service.BaseLineService;
36
import com.back.domain.user.entity.Role;
47
import com.back.domain.user.entity.User;
58
import com.back.domain.user.repository.UserRepository;
@@ -11,34 +14,35 @@
1114
import org.springframework.stereotype.Component;
1215
import org.springframework.transaction.annotation.Transactional;
1316

14-
import java.util.ArrayList;
1517
import java.util.List;
1618
import java.util.Map;
1719

1820
/**
19-
* 게스트 유저 정리 보조 scheduler
20-
* - 세션 리스너에서 처리하지 못하고 남은 게스트가 있다면 삭제
21+
* 게스트 유저 정리 보조 Scheduler
22+
* - 세션 리스너에서 처리하지 못하고 남은 게스트가 있다면 정리
2123
*/
2224
@Slf4j
2325
@Component
2426
@RequiredArgsConstructor
2527
public class GuestCleanupScheduler {
2628

2729
private final UserRepository userRepository;
30+
private final BaseLineRepository baseLineRepository;
31+
private final BaseLineService baseLineService;
2832
private final FindByIndexNameSessionRepository<? extends Session> sessionIndexRepo;
2933

3034
@Scheduled(cron = "0 0 17 * * ?") // 매일 오후 5시
3135
@Transactional
3236
public void cleanupExpiredGuests() {
33-
log.info("=== 게스트 정리 작업 시작 (index 기반) ===");
37+
log.info("=== 게스트 정리 작업 시작 ===");
3438

3539
List<User> allGuests = userRepository.findByRole(Role.GUEST);
3640
if (allGuests.isEmpty()) {
3741
log.info("게스트 유저가 없습니다.");
3842
return;
3943
}
4044

41-
List<User> expiredGuests = new ArrayList<>();
45+
int deletedUsers = 0;
4246

4347
for (User guest : allGuests) {
4448
String principal = guest.getEmail();
@@ -50,14 +54,39 @@ public void cleanupExpiredGuests() {
5054
);
5155

5256
boolean hasActive = sessions != null && !sessions.isEmpty();
53-
if (!hasActive) expiredGuests.add(guest);
57+
if (hasActive) { continue; }
58+
59+
Long userId = guest.getId();
60+
61+
try {
62+
List<Long> baseLineIds = baseLineRepository
63+
.findByUser_IdOrderByIdDesc(userId)
64+
.stream()
65+
.map(BaseLine::getId)
66+
.toList();
67+
68+
for (Long baseLineId : baseLineIds) {
69+
try {
70+
baseLineService.deleteBaseLineDeep(userId, baseLineId);
71+
} catch (Exception ex) {
72+
log.error("[GuestCleanupScheduler] baseline({}) deep 삭제 실패 - 계속 진행", baseLineId, ex);
73+
}
74+
}
75+
76+
userRepository.delete(guest);
77+
deletedUsers++;
78+
79+
log.info("[GuestCleanupScheduler] 게스트 및 소유 리소스 삭제 완료: email={}, userId={}",
80+
principal, userId);
81+
82+
} catch (Exception e) {
83+
log.error("[GuestCleanupScheduler] 게스트(userId={}, email={}) 삭제 처리 중 오류 - 다음 유저로 계속",
84+
userId, principal, e);
85+
}
5486
}
5587

56-
if (!expiredGuests.isEmpty()) {
57-
userRepository.deleteAllInBatch(expiredGuests);
58-
log.info("만료 게스트 {}명 삭제 완료 - IDs={}",
59-
expiredGuests.size(),
60-
expiredGuests.stream().map(User::getId).toList());
88+
if (deletedUsers > 0) {
89+
log.info("만료 게스트 {}명 삭제 완료", deletedUsers);
6190
} else {
6291
log.info("삭제할 만료 게스트가 없습니다.");
6392
}

0 commit comments

Comments
 (0)