From 68635423466111f6dfd23afa270b4c8385130d33 Mon Sep 17 00:00:00 2001 From: Paco Lozano Date: Sun, 18 Dec 2022 06:16:50 +0100 Subject: [PATCH] feat: request full commit data from pr list --- .../mdas/githubstats/domain/Commit.java | 13 +++++++- .../githubstats/domain/CommitAggregation.java | 10 ++++++ .../repository/CommitGitHubRepository.java | 32 +++++++++++++++++-- .../changelog/changes/000_initial_schema.yaml | 6 ++++ 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java b/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java index 14cc1298..f45f71c7 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java @@ -1,12 +1,13 @@ package io.pakland.mdas.githubstats.domain; import com.fasterxml.jackson.annotation.JsonProperty; -import java.time.Instant; +import com.fasterxml.jackson.annotation.JsonUnwrapped; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import javax.persistence.*; +import java.time.Instant; import java.util.Date; import java.util.Map; @@ -31,9 +32,19 @@ public class Commit { @ManyToOne(fetch = FetchType.LAZY) private PullRequest pullRequest; + private int additions; + + private int deletions; + @JsonProperty("commit") private void unpackDateFromNestedObject(Map commitJson) { Map committer = (Map)commitJson.get("committer"); this.date = Date.from(Instant.parse(committer.get("date").toString())); } + + @JsonProperty("stats") + private void setAdditionDeletionsLines(Map stats) { + additions = Integer.parseInt(stats.get("additions").toString()); + deletions = Integer.parseInt(stats.get("deletions").toString()); + } } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/CommitAggregation.java b/src/main/java/io/pakland/mdas/githubstats/domain/CommitAggregation.java index 54c6cc97..a92ca3e8 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/CommitAggregation.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/CommitAggregation.java @@ -6,9 +6,15 @@ public class CommitAggregation { private int numCommits; + private int linesAdded; + + private int linesRemoved; + public static CommitAggregation aggregate(List commits) { CommitAggregation commitAggregation = new CommitAggregation(); commitAggregation.numCommits = (int) commits.stream().distinct().count(); + commitAggregation.linesAdded = commits.stream().mapToInt(Commit::getAdditions).sum(); + commitAggregation.linesRemoved = commits.stream().mapToInt(Commit::getDeletions).sum(); return commitAggregation; } @@ -16,4 +22,8 @@ public int getNumCommits() { return numCommits; } + public int getLinesAdded() { return linesAdded; } + + public int getLinesRemoved() { return linesRemoved; } + } diff --git a/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/CommitGitHubRepository.java b/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/CommitGitHubRepository.java index abc1f885..4b5d1a75 100644 --- a/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/CommitGitHubRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/CommitGitHubRepository.java @@ -1,14 +1,24 @@ package io.pakland.mdas.githubstats.infrastructure.github.repository; +import com.fasterxml.jackson.annotation.JsonProperty; import io.pakland.mdas.githubstats.application.exceptions.HttpException; import io.pakland.mdas.githubstats.domain.Commit; +import io.pakland.mdas.githubstats.domain.PullRequest; import io.pakland.mdas.githubstats.domain.repository.CommitExternalRepository; +import lombok.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.reactive.function.client.WebClientResponseException; +import java.util.ArrayList; import java.util.List; +@Data +class CommitSha { + @JsonProperty("sha") + private String sha; +} + public class CommitGitHubRepository implements CommitExternalRepository { private final WebClientConfiguration webClientConfiguration; private final Logger logger = LoggerFactory.getLogger(CommitGitHubRepository.class); @@ -21,13 +31,31 @@ public CommitGitHubRepository(WebClientConfiguration webClientConfiguration) { public List fetchCommitsFromPullRequest(FetchCommitsFromPullRequestRequest request) throws HttpException { try { - return this.webClientConfiguration.getWebClient().get() + + List commitsSha = this.webClientConfiguration.getWebClient().get() .uri(String.format("/repos/%s/%s/pulls/%s/commits?%s", request.getRepositoryOwner(), request.getRepositoryName(), request.getPullRequestNumber(), getRequestParams(request))) .retrieve() - .bodyToFlux(Commit.class) + .bodyToFlux(CommitSha.class) .collectList() .block(); + + List commits = new ArrayList<>(); + if (commitsSha != null) { + for (CommitSha commitSha : commitsSha) { + commits.add( + (Commit) this.webClientConfiguration.getWebClient().get() + .uri(String.format("/repos/%s/%s/commits/%s", request.getRepositoryOwner(), + request.getRepositoryName(), commitSha.getSha())) + .retrieve() + .bodyToMono(Commit.class) + .block() + ); + } + } + + return commits; + } catch (WebClientResponseException ex) { logger.error(ex.toString()); throw new HttpException(ex.getRawStatusCode(), ex.getMessage()); diff --git a/src/main/resources/db/changelog/changes/000_initial_schema.yaml b/src/main/resources/db/changelog/changes/000_initial_schema.yaml index 21dae8f8..f89a98bd 100644 --- a/src/main/resources/db/changelog/changes/000_initial_schema.yaml +++ b/src/main/resources/db/changelog/changes/000_initial_schema.yaml @@ -45,6 +45,12 @@ databaseChangeLog: - column: name: user_id type: INT + - column: + name: additions + type: INT + - column: + name: deletions + type: INT tableName: commit - changeSet: id: 1669767244074-3