blob: 21d174edcb762560599b285caeb02c282efcdd39 [file] [log] [blame]
package build.bazel.dashboard.github.issue;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.fasterxml.jackson.databind.node.NullNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.time.Instant;
import java.util.List;
import javax.annotation.Nullable;
import lombok.Builder;
import lombok.Value;
@Builder
@Value
public class GithubIssue {
String owner;
String repo;
int issueNumber;
Instant timestamp;
String etag;
JsonNode data;
public static GithubIssue empty(
String owner, String repo, int issueNumber, ObjectMapper objectMapper) {
return GithubIssue.builder()
.owner(owner)
.repo(repo)
.issueNumber(issueNumber)
.timestamp(Instant.EPOCH)
.etag("")
.data(objectMapper.createObjectNode())
.build();
}
public static Data parseData(ObjectMapper objectMapper, JsonNode data) throws JsonProcessingException {
return objectMapper.treeToValue(data, Data.class);
}
public Data parseData(ObjectMapper objectMapper) throws JsonProcessingException {
return parseData(objectMapper, data);
}
@Builder
@Value
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public static class Data {
int number;
User user;
String title;
String state;
List<Label> labels;
List<User> assignees;
Instant createdAt;
Instant updatedAt;
@Nullable JsonNode pullRequest;
public boolean isPullRequest() {
return pullRequest != null;
}
}
@Builder
@Value
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public static class User {
String login;
String avatarUrl;
}
@Builder
@Value
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public static class Label {
String name;
String description;
String color;
}
}