diff --git a/src/main/java/cat/udl/eps/softarch/fll/domain/CompetitionTable.java b/src/main/java/cat/udl/eps/softarch/fll/domain/CompetitionTable.java index 4ae036c9..c35d6520 100644 --- a/src/main/java/cat/udl/eps/softarch/fll/domain/CompetitionTable.java +++ b/src/main/java/cat/udl/eps/softarch/fll/domain/CompetitionTable.java @@ -9,37 +9,34 @@ import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.validation.constraints.Size; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; @Entity @Table(name = "competition_tables") +@Getter +@Setter +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false, onlyExplicitlyIncluded = true) public class CompetitionTable extends UriEntity { @Id + @EqualsAndHashCode.Include private String id; - @OneToMany(mappedBy = "competitionTable", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "competitionTable", cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @JsonManagedReference("table-matches") + @Setter(lombok.AccessLevel.NONE) private List matches = new ArrayList<>(); @OneToMany(mappedBy = "supervisesTable") @Size(max = 3, message = "A table can have a maximum of 3 referees") @JsonManagedReference("table-referees") + @Setter(lombok.AccessLevel.NONE) private List referees = new ArrayList<>(); - - @Override - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public List getMatches() { - return matches; - } - public void setMatches(List matches) { new ArrayList<>(this.matches).forEach(this::removeMatch); if (matches != null) { @@ -47,50 +44,62 @@ public void setMatches(List matches) { } } - public List getReferees() { - return referees; - } - - public void setReferees(List referees) { - new ArrayList<>(this.referees).forEach(this::removeReferee); - if (referees != null) { - referees.forEach(this::addReferee); + public void addMatch(Match match) { + if (match == null || matches.contains(match)) { + return; } - } - public void addMatch(Match match) { CompetitionTable previousTable = match.getCompetitionTable(); if (previousTable != null && previousTable != this) { previousTable.removeMatch(match); } - if (!matches.contains(match)) { - matches.add(match); - } + + matches.add(match); match.setCompetitionTable(this); } public void removeMatch(Match match) { - matches.remove(match); - match.setCompetitionTable(null); + if (match == null) { + return; + } + + if (matches.remove(match)) { + match.setCompetitionTable(null); + } } - public void addReferee(Referee referee) { - CompetitionTable previousTable = referee.getSupervisesTable(); - if (previousTable != null && previousTable != this) { - previousTable.removeReferee(referee); + public void setReferees(List referees) { + new ArrayList<>(this.referees).forEach(this::removeReferee); + if (referees != null) { + referees.forEach(this::addReferee); } - if (referees.contains(referee)) { + } + + public void addReferee(Referee referee) { + if (referee == null || referees.contains(referee)) { return; } + if (referees.size() >= 3) { throw new IllegalStateException("A table can have a maximum of 3 referees"); } + + CompetitionTable previousTable = referee.getSupervisesTable(); + if (previousTable != null && previousTable != this) { + previousTable.removeReferee(referee); + } + referees.add(referee); referee.setSupervisesTable(this); } public void removeReferee(Referee referee) { - referees.remove(referee); - referee.setSupervisesTable(null); + if (referee == null) { + return; + } + + if (referees.remove(referee)) { + referee.setSupervisesTable(null); + } } } diff --git a/src/main/java/cat/udl/eps/softarch/fll/domain/Match.java b/src/main/java/cat/udl/eps/softarch/fll/domain/Match.java index cf5ec61b..3191c375 100644 --- a/src/main/java/cat/udl/eps/softarch/fll/domain/Match.java +++ b/src/main/java/cat/udl/eps/softarch/fll/domain/Match.java @@ -10,69 +10,34 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.NoArgsConstructor; @Entity @Table(name = "matches") +@Getter +@Setter +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false, onlyExplicitlyIncluded = true) public class Match extends UriEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @EqualsAndHashCode.Include private Long id; private LocalTime startTime; - private LocalTime endTime; - @JsonBackReference("round-matches") @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "round_id") + @JsonBackReference("round-matches") private Round round; - @JsonBackReference("table-matches") @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "table_id") + @JsonBackReference("table-matches") private CompetitionTable competitionTable; - - public Match() {} - - @Override - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public LocalTime getStartTime() { - return startTime; - } - - public void setStartTime(LocalTime startTime) { - this.startTime = startTime; - } - - public LocalTime getEndTime() { - return endTime; - } - - public void setEndTime(LocalTime endTime) { - this.endTime = endTime; - } - - public Round getRound() { - return round; - } - - public void setRound(Round round) { - this.round = round; - } - - public CompetitionTable getCompetitionTable() { - return competitionTable; - } - - public void setCompetitionTable(CompetitionTable competitionTable) { - this.competitionTable = competitionTable; - } } diff --git a/src/main/java/cat/udl/eps/softarch/fll/domain/Referee.java b/src/main/java/cat/udl/eps/softarch/fll/domain/Referee.java index edf591ff..de9cf127 100644 --- a/src/main/java/cat/udl/eps/softarch/fll/domain/Referee.java +++ b/src/main/java/cat/udl/eps/softarch/fll/domain/Referee.java @@ -6,10 +6,18 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; @Entity @Table(name = "referees") +@Getter +@Setter +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true) public class Referee extends Volunteer { private boolean expert; @@ -18,21 +26,4 @@ public class Referee extends Volunteer { @JoinColumn(name = "supervises_table_id") @JsonBackReference("table-referees") private CompetitionTable supervisesTable; - - - public boolean isExpert() { - return expert; - } - - public void setExpert(boolean expert) { - this.expert = expert; - } - - public CompetitionTable getSupervisesTable() { - return supervisesTable; - } - - public void setSupervisesTable(CompetitionTable supervisesTable) { - this.supervisesTable = supervisesTable; - } } diff --git a/src/main/java/cat/udl/eps/softarch/fll/domain/Round.java b/src/main/java/cat/udl/eps/softarch/fll/domain/Round.java index f2f8793c..a0caab68 100644 --- a/src/main/java/cat/udl/eps/softarch/fll/domain/Round.java +++ b/src/main/java/cat/udl/eps/softarch/fll/domain/Round.java @@ -11,13 +11,22 @@ import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.NoArgsConstructor; @Entity @Table(name = "rounds") +@Getter +@Setter +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false, onlyExplicitlyIncluded = true) public class Round extends UriEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @EqualsAndHashCode.Include private Long id; @Column(unique = true) @@ -25,31 +34,9 @@ public class Round extends UriEntity { @OneToMany(mappedBy = "round", cascade = CascadeType.ALL, orphanRemoval = true) @JsonManagedReference("round-matches") + @Setter(lombok.AccessLevel.NONE) private List matches = new ArrayList<>(); - public Round() {} - - @Override - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public int getNumber() { - return number; - } - - public void setNumber(int number) { - this.number = number; - } - - public List getMatches() { - return matches; - } - public void setMatches(List matches) { this.matches.clear(); if (matches != null) { @@ -58,12 +45,30 @@ public void setMatches(List matches) { } public void addMatch(Match match) { + if (match == null) { + return; + } + + if (matches.contains(match)) { + return; + } + + Round previousRound = match.getRound(); + if (previousRound != null && previousRound != this) { + previousRound.removeMatch(match); + } + matches.add(match); match.setRound(this); } public void removeMatch(Match match) { - matches.remove(match); - match.setRound(null); + if (match == null) { + return; + } + + if (matches.remove(match)) { + match.setRound(null); + } } }