Skip to content

Commit 563058e

Browse files
committed
feat: 이벤트 퍼블리셔, 리스너 추가
1 parent b0ce704 commit 563058e

File tree

4 files changed

+52
-16
lines changed

4 files changed

+52
-16
lines changed

src/main/java/cmf/commitField/domain/commit/scheduler/CommitScheduler.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.springframework.stereotype.Service;
1111

1212
import java.time.LocalDateTime;
13-
import java.util.List;
1413
import java.util.Set;
1514
import java.util.concurrent.TimeUnit;
1615
import java.util.concurrent.atomic.AtomicInteger;
@@ -30,25 +29,19 @@ public void updateUserCommits() {
3029
log.info("🔍 updateUserCommits 실행중");
3130
int count = counter.incrementAndGet();
3231

33-
if (count % 10 == 0) {
34-
List<User> allUsers = userRepository.findAll();
35-
log.info("🔍 All User Count: {}", allUsers.size());
32+
// 최근 로그인이 이루어진 (접근 가능성이 높은) 유저만 실시간으로 커밋 수 변경 추적 후 갱신
33+
// 최근 로그인이 이루어지지 않은 유저는 페이지 최초 로그인 시 갱신이 발생한다.
34+
Set<String> activeUsers = redisTemplate.keys("commit_active:*");
35+
log.info("🔍 Active User Count: {}", activeUsers.size());
3636

37-
for (User user : allUsers) {
37+
for (String key : activeUsers) {
38+
String username = key.replace("commit_active:", "");
39+
User user = userRepository.findByUsername(username).orElse(null);
40+
if (user != null) {
3841
processUserCommit(user);
3942
}
40-
} else {
41-
Set<String> activeUsers = redisTemplate.keys("commit_active:*");
42-
log.info("🔍 Active User Count: {}", activeUsers.size());
43-
44-
for (String key : activeUsers) {
45-
String username = key.replace("commit_active:", "");
46-
User user = userRepository.findByUsername(username).orElse(null);
47-
if (user != null) {
48-
processUserCommit(user);
49-
}
50-
}
5143
}
44+
5245
}
5346

5447
// 🔹 유저 커밋 검사 및 반영
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package cmf.commitField.domain.commit.scheduler;
2+
3+
import org.springframework.context.ApplicationEvent;
4+
5+
public class CommitUpdateEvent extends ApplicationEvent {
6+
private final Long userId;
7+
private final int commitCount;
8+
9+
public CommitUpdateEvent(Object source, Long userId, int commitCount) {
10+
super(source);
11+
this.userId = userId;
12+
this.commitCount = commitCount;
13+
}
14+
15+
public Long getUserId() {
16+
return userId;
17+
}
18+
19+
public int getCommitCount() {
20+
return commitCount;
21+
}
22+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package cmf.commitField.domain.commit.scheduler;
2+
3+
import org.springframework.context.event.EventListener;
4+
import org.springframework.stereotype.Service;
5+
6+
@Service
7+
public class CommitUpdateListener {
8+
9+
@EventListener
10+
public void handleCommitUpdateEvent(CommitUpdateEvent event) {
11+
// 이벤트 처리 로직
12+
Long userId = event.getUserId();
13+
int commitCount = event.getCommitCount();
14+
15+
// 커밋 갱신 후에 다른 서비스에서 필요한 작업 수행 (예: DB 업데이트, 상태 갱신 등)
16+
System.out.println("User ID: " + userId + " has updated " + commitCount + " commits.");
17+
}
18+
}

src/main/java/cmf/commitField/domain/commit/scheduler/CommitUpdateService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cmf.commitField.domain.user.entity.User;
77
import cmf.commitField.domain.user.repository.UserRepository;
88
import lombok.RequiredArgsConstructor;
9+
import org.springframework.context.ApplicationEventPublisher;
910
import org.springframework.stereotype.Service;
1011

1112
import java.time.LocalDateTime;
@@ -17,6 +18,8 @@ public class CommitUpdateService {
1718
private final UserRepository userRepository;
1819
private final PetService petService;
1920

21+
private final ApplicationEventPublisher eventPublisher;
22+
2023
public UserInfoDto updateUserTier(String username){
2124
User user = userRepository.findByUsername(username).get();
2225
long seasonCommitCount;

0 commit comments

Comments
 (0)