-
GITHUB API를 활용한 커밋 기록 조회 (4) 커밋 히스토리 로직 구현devRace 2024. 11. 14. 19:52
지난 글에서
커밋 카운트를 스케줄러로 6시간마다 업데이트하여
전체 기간, 현재 월, 현재 주, 오늘의 커밋 카운트를 증가시키는 로직을 구현하였다.
이 글에서는
10월 커밋기록이 11월이 되면 해당 기록은 날아가야하는가?
11월 1주차의 커밋기록이 2주차 월요일이 되면 해당 기록은 지워져야하는가?
오늘한 커밋기록이 내일이 되면 사라져야하는가?
에 대해 고민하다 결정한 커밋 히스토리이다.
또한 이렇게 캘린더에 커밋과 알고리즘, TIL 제출 여부를 체크해야 하고, 시간이 지나서도 볼 수 있어야 하므로
히스토리 스케줄러를 통해 매월 1일, 매 주 월요일, 매일 0시가 조금 넘은 시간에 이전 기간에 대한 커밋을 저장하도록 하였다.
@Transactional @Scheduled(cron = "0 15 0 1 * ?") // 매 월 1일 00:15 실행 public void saveMonthlyCommitHistory() { ZonedDateTime toDate = ZonedDateTime.now(ZoneOffset.UTC).minusMonths(1).withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS).plusMonths(1).minusNanos(1); ZonedDateTime fromDate = toDate.withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS); List<User> userList = userRepository.findAll(); for (User user : userList) { try { long monthlyCommits = commitService.getCommitCountForMonth(user, fromDate.getYear(), fromDate.getMonthValue()); CommitHistory commitHistory = CommitHistory.builder() .user(user) .year(fromDate.getYear()) .month(fromDate.getMonthValue()) .commitCount(monthlyCommits) .recordDate(ZonedDateTime.now()) .build(); commitHistoryRepository.save(commitHistory); } catch (Exception e) { log.error("월간 커밋 기록 저장에 실패하였습니다. user: {}. Error: {}", user.getId(), e.getMessage()); } } }
월간 스케줄러의 경우 매 월 1일 0시 15분에 모든 유저를 대상으로 실행하며
기간을 이전달 1일 0시부터 이전달 말일 23시 59분 59.999999999초까지 설정하여
중간에 누락되는 카운트가 없도록 하였다.
이런 로직을 알고리즘 제출과 개발일지 제출에도 반영하여 특정 기간에 대한 카운트 로직을 구현하였다.
다만 알고리즘 제출과 개발일지 제출은 제출 시 이벤트 리스너를 활용하여 즉각적으로 카운트가 올라가도록 하였다.
'devRace' 카테고리의 다른 글
Commit Count 확장 - 로그(TIL) 카운트 EventListener Error (0) 2024.11.26 GITHUB API를 활용한 커밋 기록 조회 (3) 커밋카운트 로직 적용 (0) 2024.11.13 GITHUB API를 활용한 커밋 기록 조회 (2) GithubApiClient 작성 (0) 2024.11.12 GITHUB API를 활용한 커밋 기록 조회 (1) 깃허브 API 적용 (0) 2024.11.11