diff --git a/src/main/java/de/pnreichmuth/timekeep_backend/entities/Station.java b/src/main/java/de/pnreichmuth/timekeep_backend/entities/Station.java index add004a..99a1200 100644 --- a/src/main/java/de/pnreichmuth/timekeep_backend/entities/Station.java +++ b/src/main/java/de/pnreichmuth/timekeep_backend/entities/Station.java @@ -1,13 +1,13 @@ package de.pnreichmuth.timekeep_backend.entities; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import de.pnreichmuth.timekeep_backend.exceptions.TeamExistsException; +import de.pnreichmuth.timekeep_backend.exceptions.TeamNotFoundException; +import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; -import java.util.UUID; +import java.time.LocalDate; +import java.util.*; @Entity @Getter @@ -21,9 +21,31 @@ public class Station { private String location; private String passwordHash; + @ManyToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) + @JoinTable(name="team_passed_stations") + private Set passedTeams; + + @ElementCollection + private Map passingTimes; + public Station(String name, String location){ this.name = name; this.location = location; this.passwordHash = null; + this.passedTeams = new HashSet<>(1); + this.passingTimes = new HashMap<>(1); + } + + public void teamPassed(Team team){ + if(!passedTeams.add(team)){ + throw new TeamExistsException("Team %s was already seen at this Station: %s".formatted(team.getTeamName(), this.location), team); + } + passingTimes.put(team, LocalDate.now()); + } + + public void removePassedTeam(Team team){ + if (!passedTeams.contains(team)) throw new TeamNotFoundException("Team %s was never seen at this station: %s".formatted(team.getTeamName(), this.location)); + passedTeams.remove(team); + passingTimes.remove(team); } } \ No newline at end of file