Fix drawn players

This commit is contained in:
Michel ten Voorde
2024-10-25 14:32:05 +02:00
parent 8af99e29ee
commit f91c50af7b
4 changed files with 34 additions and 274 deletions

View File

@@ -64,8 +64,6 @@ public class TestController {
}
@GetMapping("/testdata")
// @PostConstruct
// @Transactional
public void init(@RequestHeader(name = "Authorization", required = false) String authorizationHeader) {
this.authorizationHeader = authorizationHeader;
@@ -73,8 +71,10 @@ public class TestController {
var tournament = createTournament();
getMales().forEach(player -> savePlayer(player, Sex.M));
getFemales().forEach(player -> savePlayer(player, Sex.V));
if (getPlayers().size() < 60) {
getMales().forEach(player -> savePlayer(player, Sex.M));
getFemales().forEach(player -> savePlayer(player, Sex.V));
}
registerForSingles(tournament);
registerForDoubles(tournament);
@@ -88,7 +88,6 @@ public class TestController {
headers.add("Authorization", authorizationHeader);
var entity = new HttpEntity<>(headers);
// return Arrays.asList(restTemplate.getForEntity("http://localhost:8080/players", PlayerDto[].class).getBody());
return Arrays.asList(restTemplate.exchange("http://localhost:8080/players", HttpMethod.GET, entity, PlayerDto[].class).getBody());
}
@@ -137,7 +136,6 @@ public class TestController {
var eventId = tournament.getEvents().stream().filter(event -> event.getType().equals(eventType)).findFirst().get().getId();
// for (var player : getPlayers()) {
var tournamentRegistrationDto = new TournamentRegistrationDto();
tournamentRegistrationDto.setId(tournament.getId());
var eventRegistrationDto = new EventRegistrationDto();
@@ -152,7 +150,6 @@ public class TestController {
headers.add("Authorization", authorizationHeader);
var entity = new HttpEntity<>(tournamentRegistrationDto, headers);
restTemplate.postForObject("http://localhost:8080/players/%d/registrations/%d".formatted(player.getId(), tournament.getId()), entity, TournamentRegistrationDto.class);
// }
}
@@ -240,268 +237,4 @@ public class TestController {
return LocalDate.ofEpochDay(randomDay);
}
/*
private void deRest() {
var malePlayers = List.of(
savePlayer("Michel", Sex.M),
savePlayer("Eric", Sex.M),
savePlayer("Leon", Sex.M),
savePlayer("Luuk", Sex.M),
savePlayer("Jeffrey", Sex.M),
savePlayer("Jason", Sex.M),
savePlayer("Oleg", Sex.M),
savePlayer("Gerjan", Sex.M),
savePlayer("Gerard", Sex.M),
savePlayer("Henk", Sex.M),
savePlayer("Peter", Sex.M),
savePlayer("Gerrit", Sex.M),
savePlayer("Wilco", Sex.M),
savePlayer("Guido", Sex.M),
savePlayer("Sander", Sex.M),
savePlayer("Roy", Sex.M),
savePlayer("Yafiq", Sex.M),
savePlayer("Martijn", Sex.M),
savePlayer("Dick", Sex.M),
savePlayer("Willem", Sex.M),
savePlayer("Layo", Sex.M),
savePlayer("Thomas", Sex.M),
savePlayer("Gerben", Sex.M),
savePlayer("Bert", Sex.M),
savePlayer("Bart", Sex.M),
savePlayer("Nico", Sex.M),
savePlayer("Jan", Sex.M),
savePlayer("Diederik", Sex.M),
savePlayer("Gert", Sex.M),
savePlayer("Dennis", Sex.M),
savePlayer("Pieter", Sex.M)
);
var femalePlayers = List.of(
savePlayer("Amber", Sex.V),
savePlayer("Lisa", Sex.V),
savePlayer("Vanja", Sex.V),
savePlayer("Evelien", Sex.V),
savePlayer("Daphne", Sex.V),
savePlayer("Willemijn", Sex.V),
savePlayer("Miranda", Sex.V),
savePlayer("Inge", Sex.V),
savePlayer("Esmee", Sex.V),
savePlayer("Joanne", Sex.V),
savePlayer("Laura", Sex.V),
savePlayer("Nienke", Sex.V),
savePlayer("Patty", Sex.V),
savePlayer("Rosan", Sex.V),
savePlayer("Vera", Sex.V),
savePlayer("Hedwig", Sex.V),
savePlayer("Lois", Sex.V),
savePlayer("Liedewij", Sex.V),
savePlayer("Gera", Sex.V),
savePlayer("Carolien", Sex.V),
savePlayer("Anne", Sex.V),
savePlayer("Dominique", Sex.V),
savePlayer("Linda", Sex.V),
savePlayer("Esther", Sex.V),
savePlayer("Marilyn", Sex.V),
savePlayer("Ilse", Sex.V),
savePlayer("Emily", Sex.V),
savePlayer("Eva", Sex.V),
savePlayer("Kitty", Sex.V),
savePlayer("Floor", Sex.V),
savePlayer("Tess", Sex.V),
savePlayer("Fenna", Sex.V)
);
malePlayers.forEach(player -> registerForSingles(tournamentId, player));
femalePlayers.forEach(player -> registerForSingles(tournamentId, player));
malePlayers = new ArrayList<>(malePlayers);
malePlayers.add(savePlayer("Rolf", Sex.M));
for (var i = 0; i < 14; i += 2) {
registerForDoubles(tournamentId, malePlayers.get(i), malePlayers.get(i + 1));
registerForDoubles(tournamentId, malePlayers.get(i + 1), malePlayers.get(i));
}
for (var i = 0; i < 16; i += 2) {
registerForDoubles(tournamentId, femalePlayers.get(i), femalePlayers.get(i + 1));
registerForDoubles(tournamentId, femalePlayers.get(i + 1), femalePlayers.get(i));
}
for (var i = 16; i < malePlayers.size(); i++) {
registerForDoubles(tournamentId, malePlayers.get(i), femalePlayers.get(i));
registerForDoubles(tournamentId, femalePlayers.get(i), malePlayers.get(i));
}
divideTournament(tournamentId);
drawTournament(tournamentId);
// startRound(2L, 1L);
// playRound(2L, 0, 0);
startRound(tournamentId, 2L);
playRound(tournamentId, 1, 0);
finishRound(tournamentId, 2L);
newRound(tournamentId, 2L);
startRound(tournamentId, 8L);
playRound(tournamentId, 1, 1);
if (1==1) return;
finishRound(tournamentId, 8L);
newRound(tournamentId, 2L);
startRound(tournamentId, 9L);
playRound(tournamentId, 1, 2);
finishRound(tournamentId, 9L);
newRound(tournamentId, 2L);
startRound(tournamentId, 10L);
playRound(tournamentId, 1, 3);
// finishRound(2L, 10L);
}
private void addToTournament(Long tournamentId, Player player) {
var tournament = tournamentService.findTournamentById(tournamentId);
TournamentPlayer tournamentPlayer = new TournamentPlayer();
tournamentPlayer.setTournament(tournament);
tournamentPlayer.setPlayer(player);
tournament.getTournamentPlayers().add(tournamentPlayer);
tournamentService.saveTournament(tournament);
}
private void divideTournament(Long tournamentId) {
var tournament = tournamentService.findTournamentById(tournamentId);
tournamentDivideService.divide(tournament);
}
private void drawTournament(Long tournamentId) {
var tournament = tournamentService.findTournamentById(tournamentId);
tournamentDrawService.draw(tournament);
}
private void playRound(long tournamentId, int group, int round) {
var tournament = tournamentService.findTournamentById(tournamentId);
for (var match : tournament.getEvents().get(0).getGroups().get(group).getRounds().get(round).getMatches()) {
tournamentPlayService.startMatch(tournament, match.getId(), 1L);
}
for (var match : tournament.getEvents().get(0).getGroups().get(group).getRounds().get(round).getMatches()) {
tournament = tournamentService.findTournamentById(tournamentId);
var resultDto = new ResultDto();
resultDto.getGames().add(getRandomGame());
resultDto.getGames().add(getRandomGame());
resultDto.setMatchId(match.getId());
tournamentPlayService.saveResult(tournament, match.getId(), resultDto);
}
}
private GameDto getRandomGame() {
Random random = new Random();
var gameDto = new GameDto();
gameDto.setScore1(21L);
gameDto.setScore2(random.nextLong(19));
return gameDto;
}
private void finishRound(long tournamentId, long roundId) {
var tournament = tournamentService.findTournamentById(tournamentId);
tournamentPlayService.finishRound(tournament, roundId);
}
private void newRound(long tournamentId, long groupId) {
var tournament = tournamentService.findTournamentById(tournamentId);
tournamentPlayService.newRound(tournament, groupId);
}
private void startRound(long tournamentId, long roundId) {
var tournament = tournamentService.findTournamentById(tournamentId);
tournamentPlayService.startRound(tournament, roundId);
}
// private void saveTournament1() {
// var tournament = new Tournament();
// tournament.setName("Zwitsers Laddersysteem BC Holten 2023");
// tournament.setDate(LocalDate.of(2023, Month.DECEMBER, 12));
// tournament.setStatus(TournamentStatus.CLOSED);
// tournamentService.saveTournament(tournament);
// }
private Long saveTournament() {
var tournament = new Tournament();
tournament.setName("Testtoernooi");
tournament.setDate(LocalDate.of(2024, Month.DECEMBER, 14));
tournament.setStatus(TournamentStatus.UPCOMING);
tournament.setMaxEvents(2L);
tournament.setCourts(9L);
tournament.setCostsPerEvent(List.of(6f, 10f));
tournamentService.saveTournament(tournament);
return tournament.getId();
}
private void registerForSingles(Long tournamentId, Player player) {
var tournament = tournamentService.findTournamentById(tournamentId);
var registration = new Registration();
registration.setPlayer(player);
var event = tournament.getEventByType(player.getSex() == Sex.M ? EventType.HE : EventType.DE);
registration.setPartner(null);
registration.setTournament(tournament);
registration.setEvent(event);
if (event.getRegistrations() == null) event.setRegistrations(new ArrayList<>());
event.getRegistrations().add(registration);
// player.getRegistrations().add(registration);
tournamentService.saveTournament(tournament);
}
private void registerForDoubles(Long tournamentId, Player player, Player partner) {
var tournament = tournamentService.findTournamentById(tournamentId);
var registration = new Registration();
registration.setPlayer(player);
registration.setPartner(partner);
var event = tournament.getEventByType(
player.getSex() == partner.getSex() ?
(player.getSex() == Sex.M ? EventType.HD : EventType.DD) : EventType.GD);
registration.setTournament(tournament);
registration.setEvent(event);
event.getRegistrations().add(registration);
// player.getRegistrations().add(registration);
tournamentService.saveTournament(tournament);
}
// private Player savePlayer(String firstName, Sex sex) {
// Random random = new Random();
//
// String[] lastNames = {
// "Meedendorp", "Holstege", "Goedhart", "Zijlma", "Duursma", "Keizer", "Verschoor",
// "Mulder", "Koers", "Duindam", "Castelein", "Coemans", "Huijbers", "Kelder",
// "Stein", "Rakhorst", "Brugman", "Seinen", "Mayer", "Gijsman", "Kingma",
// "Jansen", "Westerik", "Brehler", "Ebbers", "Lensink", "Lups", "Verboom"
// };
//
// String[] clubs = {
// "BC Holten", "BC Reflex", "ZBC", "WSV Apeldoorn", "BC IJsselstad", "Flits", "ELO United", "BC Kwiek"
// };
//
// var player = new Player();
// player.setFirstName(firstName);
// player.setLastName(lastNames[random.nextInt(lastNames.length)]);
// player.setClub(clubs[random.nextInt(clubs.length)]);
// player.setSex(sex);
// player.setBirthday(randomDate(LocalDate.of(1950, 1, 1), LocalDate.of(2010, 1, 1)));
// player.setPhoneNumber("0612345678");
// player.setEmail("aaaa@bbb.cc");
// player.setStrength(getRandomStrength());
//
// playerService.savePlayer(player);
// return player;
// }
*/
}

View File

@@ -65,7 +65,12 @@ public class TournamentController {
@PostMapping("/tournaments")
public ResponseEntity<TournamentDto> createTournament(@RequestBody TournamentDto tournamentDto) {
var tournament = tournamentMapper.toEntity(tournamentDto);
Tournament tournament;
try {
tournament = tournamentMapper.toEntity(tournamentDto);
} catch (NullPointerException e) {
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok(tournamentMapper.toDto(tournamentService.saveTournament(tournament)));
}

View File

@@ -1,6 +1,7 @@
package nl.connectedit.swiss.domain.entity;
import jakarta.persistence.*;
import java.util.HashSet;
import lombok.Getter;
import lombok.Setter;
import nl.connectedit.swiss.domain.EventType;
@@ -68,4 +69,23 @@ public class Tournament extends AbstractEntity {
.collect(Collectors.toCollection(ArrayList::new));
}
public boolean hasPlayersDrawnOutMaxOnce() {
var drawnOutPlayers = new HashSet<Player>();
for (var event : events) {
for (var group : event.getGroups()) {
for (var round : group.getRounds()) {
var drawnOut = round.getDrawnOut();
if (drawnOut != null) {
if (!drawnOutPlayers.add(drawnOut.getPlayer1())) {
return false;
}
if (drawnOut.getPlayer2() != null && !drawnOutPlayers.add(drawnOut.getPlayer2())) {
return false;
}
}
}
}
}
return true;
}
}

View File

@@ -21,11 +21,13 @@ public class TournamentDrawService {
for (var event : tournament.getEvents()) {
for (var group : event.getGroups()) {
var round = new Round();
group.getRounds().add(round);
round.setName("Ronde 1");
round.setGroup(group);
round.setMatches(createMatchList(group, round));
do {
round.setMatches(createMatchList(group, round));
} while (!tournament.hasPlayersDrawnOutMaxOnce());
round.setStatus(Status.NOT_STARTED);
group.getRounds().add(round);
}
}