Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public GetRepositoriesByTeam() {}

@Transactional
public List<Repository> execute(Team team) {
return team.getRepositories();
return team.getRepositories().stream().toList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ public GetTeamsFromOrganization() { }

@Transactional
public List<Team> execute(Organization org) {
return org.getTeams();
return org.getTeams().stream().toList();
}
}
78 changes: 55 additions & 23 deletions src/main/java/io/pakland/mdas/githubstats/domain/Organization.java
Original file line number Diff line number Diff line change
@@ -1,35 +1,67 @@
package io.pakland.mdas.githubstats.domain;

import javax.persistence.*;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import lombok.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
@Table(name = "organization")
public class Organization {
@Id
@Column(updatable = false, nullable = false)
@JsonProperty("id")
private Integer id;

@Column
@JsonProperty("login")
private String login;

@OneToMany(
mappedBy = "organization",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Team> teams = new ArrayList<>();

@Id
@Column(updatable = false, nullable = false)
@JsonProperty("id")
@NotNull
private Integer id;

@Column
@JsonProperty("login")
private String login;

@OneToMany(
mappedBy = "organization",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private Set<Team> teams = new HashSet<>();

public void addTeam(Team team) {
if (teams == null) {
teams = new HashSet<>();
}

teams.add(team);
team.setOrganization(this);
}

public List<Team> getTeams() {
return teams.stream().toList();
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}

Organization that = (Organization) o;

return id.equals(that.id);
}

@Override
public int hashCode() {
return id.hashCode();
}
}
20 changes: 20 additions & 0 deletions src/main/java/io/pakland/mdas/githubstats/domain/Repository.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
@Table(name = "repository")
public class Repository {

Expand Down Expand Up @@ -47,4 +48,23 @@ public class Repository {
private void unpackNameFromNestedObject(Map<String, String> owner) {
this.ownerLogin = owner.get("login");
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}

Repository that = (Repository) o;

return id.equals(that.id);
}

@Override
public int hashCode() {
return id.hashCode();
}
}
91 changes: 60 additions & 31 deletions src/main/java/io/pakland/mdas/githubstats/domain/Team.java
Original file line number Diff line number Diff line change
@@ -1,44 +1,73 @@
package io.pakland.mdas.githubstats.domain;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.*;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import lombok.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
@Table(name = "team")
public class Team {

@Id
@Column(updatable = false, nullable = false)
@JsonProperty("id")
private Integer id;

@Column(name = "slug")
@JsonProperty("slug")
private String slug;

@ManyToOne(fetch = FetchType.LAZY)
private Organization organization;

@OneToMany(
mappedBy = "team",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<User> users = new ArrayList<>();

@OneToMany(
mappedBy = "team",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Repository> repositories = new ArrayList<>();
@Id
@Column(updatable = false, nullable = false)
@JsonProperty("id")
private Integer id;

@Column(name = "slug")
@JsonProperty("slug")
private String slug;

@ManyToOne(fetch = FetchType.LAZY)
private Organization organization;

@OneToMany(
mappedBy = "team",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<User> users = new ArrayList<>();

@OneToMany(
mappedBy = "team",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private Set<Repository> repositories = new HashSet<>();

public void addRepository(Repository repository) {
if (repositories == null) {
repositories = new HashSet<>();
}

repositories.add(repository);
repository.setTeam(this);
}

public List<Repository> getRepositories() {
return repositories.stream().toList();
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}

Team team = (Team) o;

return id.equals(team.id);
}

@Override
public int hashCode() {
return id.hashCode();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ public void execute() {
.execute(organization.getLogin());

for (Team team : teamList) {
organization.addTeam(team);
// Fetch the members of each team.
logger.info(organization.getLogin());
List<User> userList = new FetchUsersFromTeam(userExternalRepository)
.execute(organization.getLogin(), team.getSlug());
// Fetch the repositories for each team.
Expand All @@ -64,6 +64,7 @@ public void execute() {
repositoryList.forEach(r -> r.setTeam(team));

for (Repository repository : repositoryList) {
team.addRepository(repository);
// Fetch pull requests from each team.
List<PullRequest> pullRequestList = new FetchPullRequestsFromRepository(
pullRequestExternalRepository)
Expand All @@ -83,10 +84,7 @@ public void execute() {
}

team.setUsers(userList);
team.setRepositories(repositoryList);
}

organization.setTeams(teamList);
}
} catch (HttpException e) {
throw new RuntimeException(e);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package io.pakland.mdas.githubstats.domain;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

import java.util.Collections;
import java.util.HashSet;
import org.junit.jupiter.api.Test;

public class OrganizationTest {

@Test
public void shouldAddTheTeamToTheOrganization_andSetTheTeamOrganization() {
Organization organization = Organization.builder().id(1).login("github-stats").build();
Team team = Team.builder().id(1).slug("gs-developers").build();

assertNull(team.getOrganization());
organization.addTeam(team);

assertEquals(organization.getTeams().size(), 1);
assertEquals(team.getOrganization(), organization);
}

@Test
public void shouldNotAddTheTeam_whenTheTeamIsAlreadyContained() {
Organization organization = Organization.builder().id(1).login("github-stats").build();
Team team = Team.builder().id(1).slug("gs-developers").build();
organization.setTeams(new HashSet<>(Collections.singletonList(team)));

assertNull(team.getOrganization());
assertEquals(organization.getTeams().size(), 1);
organization.addTeam(team);

assertEquals(organization.getTeams().size(), 1);
assertEquals(team.getOrganization(), organization);
}

@Test
public void shouldCheckForEqualOrganizations() {
Organization original = Organization.builder().id(1).build();
Organization equal = Organization.builder().id(1).build();
Organization notEqual = Organization.builder().id(2).build();

assertEquals(original, equal);
assertNotEquals(original, notEqual);
}

}
49 changes: 49 additions & 0 deletions src/test/java/io/pakland/mdas/githubstats/domain/TeamTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package io.pakland.mdas.githubstats.domain;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

import java.util.Collections;
import java.util.HashSet;
import org.junit.jupiter.api.Test;

public class TeamTest {

@Test
public void shouldAddTheRepository_andAssignTheTeamToTheRepository() {
Team team = Team.builder().id(1).slug("gs-developers").build();
Repository repository = Repository.builder().id(1).name("github-stats").build();

assertNull(repository.getTeam());
team.addRepository(repository);

assertEquals(repository.getTeam(), team);
assertEquals(1, team.getRepositories().size());
}

@Test
public void shouldNotAddTheRepository_whenTheRepositoryIsAlreadyContained() {
Team team = Team.builder().id(1).slug("gs-developers").build();
Repository repository = Repository.builder().id(1).name("github-stats").build();
team.setRepositories(new HashSet<>(Collections.singletonList(repository)));

assertNull(repository.getTeam());
assertEquals(1, team.getRepositories().size());
team.addRepository(repository);

assertEquals(repository.getTeam(), team);
assertEquals(1, team.getRepositories().size());
}

@Test
public void shouldCheckForEqualTeams() {
Team original = Team.builder().id(1).build();
Team equal = Team.builder().id(1).build();
Team notEqual = Team.builder().id(2).build();

assertEquals(original, equal);
assertNotEquals(original, notEqual);
}

}
Loading