-
GITHUB API를 활용한 커밋 기록 조회 (2) GithubApiClient 작성devRace 2024. 11. 12. 16:25
@Component public class GithubApiClient { private final GitHub github; public GithubApiClient(@Value("${github.oauth.token}") String oauthToken) { try { this.github = new GitHubBuilder().withOAuthToken(oauthToken).build(); github.checkApiUrlValidity(); } catch (Exception e) { throw new CustomException(ErrorCode.FAIL_TO_CONNECT_GITHUB); } }
깃허브에서 발급받은 토큰을 활용하여 깃허브 클라이언트를 생성한다
public long getCommitCountInperiod (String githubUsername, ZonedDateTime since, ZonedDateTime until) throws Exception { return github.getUser(githubUsername) .listEvents() .toList() .stream() .filter(this::isPushEvent) .filter(event -> isWithinPeriod(event, since, until)) .mapToLong(this::getCommitCountFromEvent) .sum(); }
유저의 특정 기간동안의 깃허브 커밋 수를 가져온다.
private long getCommitCountFromEvent(GHEventInfo event) { try { if (isPushEvent(event)) { GHEventPayload.Push pushPayload = event.getPayload(GHEventPayload.Push.class); List<GHEventPayload.Push.PushCommit> commits = pushPayload.getCommits(); return commits.size(); } } catch (Exception e) { throw new CustomException(ErrorCode.CAN_NOT_EXTRACTION_COMMIT_COUNT); } return 0; }
private boolean isPushEvent(GHEventInfo event) { return event.getType() == GHEvent.PUSH; }
깃허브에서 이벤트가 발생할 경우 해당 이벤트가 푸시이벤트인지 확인
푸시 이벤트가 맞을 경우 GHEventPayload.Push 이걸 가져와서 커밋 리스트를 가져옴
가져온 커밋리스트의 사이즈를 반환 (커밋 갯수 반환)
-> 이벤트 발생 시 푸시 이벤트인지 확인 후 푸시 이벤트인 경우 커밋 갯수를 반환하는 로직
이를 통해 데브레이스 회원가입부터 지금까지의 커밋 갯수를 가져오는 로직을 완성하였고,
코드를 바탕으로 월간, 주간 일간 커밋을 카운트하여 저장하는 로직을 구현하였다.
'devRace' 카테고리의 다른 글
Commit Count 확장 - 로그(TIL) 카운트 EventListener Error (0) 2024.11.26 GITHUB API를 활용한 커밋 기록 조회 (4) 커밋 히스토리 로직 구현 (1) 2024.11.14 GITHUB API를 활용한 커밋 기록 조회 (3) 커밋카운트 로직 적용 (0) 2024.11.13 GITHUB API를 활용한 커밋 기록 조회 (1) 깃허브 API 적용 (0) 2024.11.11