diff --git a/src/main/java/nl/connectedit/swiss/controller/TestController.java b/src/main/java/nl/connectedit/swiss/controller/TestController.java index c18a71b..28bd10f 100644 --- a/src/main/java/nl/connectedit/swiss/controller/TestController.java +++ b/src/main/java/nl/connectedit/swiss/controller/TestController.java @@ -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; -// } -*/ - } diff --git a/src/main/java/nl/connectedit/swiss/controller/TournamentController.java b/src/main/java/nl/connectedit/swiss/controller/TournamentController.java index f40e487..df17f87 100755 --- a/src/main/java/nl/connectedit/swiss/controller/TournamentController.java +++ b/src/main/java/nl/connectedit/swiss/controller/TournamentController.java @@ -65,7 +65,12 @@ public class TournamentController { @PostMapping("/tournaments") public ResponseEntity 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))); } diff --git a/src/main/java/nl/connectedit/swiss/domain/entity/Tournament.java b/src/main/java/nl/connectedit/swiss/domain/entity/Tournament.java index b2caf41..f1b2942 100644 --- a/src/main/java/nl/connectedit/swiss/domain/entity/Tournament.java +++ b/src/main/java/nl/connectedit/swiss/domain/entity/Tournament.java @@ -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(); + 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; + } } diff --git a/src/main/java/nl/connectedit/swiss/service/TournamentDrawService.java b/src/main/java/nl/connectedit/swiss/service/TournamentDrawService.java index c7c2a19..1664d39 100644 --- a/src/main/java/nl/connectedit/swiss/service/TournamentDrawService.java +++ b/src/main/java/nl/connectedit/swiss/service/TournamentDrawService.java @@ -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); } }