Files
swiss-backend/src/main/java/nl/connectedit/swiss/domain/entity/Tournament.java
Michel ten Voorde 3baea70356
All checks were successful
Gitea/swiss-backend/pipeline/head This commit looks good
Added TournamentRegistration.active
2025-08-15 09:31:27 +02:00

112 lines
3.2 KiB
Java

package nl.connectedit.swiss.domain.entity;
import jakarta.persistence.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
import nl.connectedit.swiss.domain.EventType;
import nl.connectedit.swiss.domain.TournamentStatus;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Entity
@Table
@Getter
@Setter
public class Tournament extends AbstractEntity {
public Tournament() {
initialize();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private LocalDate date;
@Enumerated(EnumType.STRING)
private TournamentStatus status;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Event> events;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<TournamentPlayer> tournamentPlayers;
private Long maxEvents;
@ElementCollection
private List<Float> costsPerEvent;
private Long courts;
private Boolean active;
public void initialize() {
this.events = new ArrayList<>();
this.events.addAll(Event.getBlankEventSet(this));
this.status = TournamentStatus.UPCOMING;
}
public Event getEventByType(EventType type) {
return events
.stream()
.filter(event -> event.getType().equals(type))
.findFirst()
.orElse(null);
}
public List<Registration> getRegistrations() {
return events
.stream()
.map(Event::getRegistrations)
.flatMap(List::stream)
.collect(Collectors.toCollection(ArrayList::new));
}
public List<Player> getDrawnOutPlayers() {
var drawnOutPlayers = new ArrayList<Player>();
for (var event : events) {
for (var group : event.getGroups()) {
for (var round : group.getRounds()) {
var drawnOut = round.getDrawnOut();
if (drawnOut != null) {
drawnOutPlayers.add(drawnOut.getPlayer1());
if (drawnOut.getPlayer2() != null) {
drawnOutPlayers.add(drawnOut.getPlayer2());
}
}
}
}
}
return drawnOutPlayers;
}
public boolean hasPlayersDrawnOutMaxOnce() {
var drawnOutPlayers = this.getDrawnOutPlayers();
return drawnOutPlayers.size() == new HashSet<>(drawnOutPlayers).size();
}
public List<Player> getPlayersPlayingOnlyOneEvent() {
var playerEvents = new HashMap<Player, List<EventType>>();
for (var registration : getRegistrations()) {
if (!playerEvents.containsKey(registration.getPlayer())) {
playerEvents.put(registration.getPlayer(), new ArrayList<>());
}
playerEvents.get(registration.getPlayer()).add(registration.getEvent().getType());
}
return playerEvents.entrySet().stream()
.filter(entry -> entry.getValue().size() == 1)
.map(Map.Entry::getKey)
.toList();
}
}