From 36c8f3b22fe883bbac432718b8ecba085f85181c Mon Sep 17 00:00:00 2001 From: Michel ten Voorde Date: Mon, 18 Aug 2025 23:27:14 +0200 Subject: [PATCH] Add match counter --- .../controller/TournamentController.java | 7 +++-- .../swiss/domain/entity/Match.java | 3 ++ .../swiss/domain/entity/TournamentPlayer.java | 4 +++ .../nl/connectedit/swiss/dto/MatchDto.java | 2 ++ .../swiss/dto/TournamentPlayerDto.java | 4 +++ .../connectedit/swiss/mapper/MatchMapper.java | 5 +++ .../swiss/mapper/TournamentPlayerMapper.java | 4 +-- .../swiss/service/TournamentPlayService.java | 31 ++++++++++++++----- 8 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/main/java/nl/connectedit/swiss/controller/TournamentController.java b/src/main/java/nl/connectedit/swiss/controller/TournamentController.java index 5d097e3..a46d10e 100755 --- a/src/main/java/nl/connectedit/swiss/controller/TournamentController.java +++ b/src/main/java/nl/connectedit/swiss/controller/TournamentController.java @@ -156,11 +156,12 @@ public class TournamentController { return ResponseEntity.ok(tournamentMapper.toDto(tournamentPlayService.newRound(tournament, groupId))); } - @PostMapping("/tournaments/{tournamentId}/matches/{matchId}/start/{court}") - public ResponseEntity startMatch(@PathVariable Long tournamentId, @PathVariable Long matchId, @PathVariable Long court) { + @PostMapping("/tournaments/{tournamentId}/matches/{matchId}/start") + public ResponseEntity startMatch(@PathVariable Long tournamentId, @PathVariable Long matchId, + @RequestParam("court") Long court, @RequestParam("counter") Long counter) { var tournament = tournamentService.findTournamentById(tournamentId); - return ResponseEntity.ok(tournamentMapper.toDto(tournamentPlayService.startMatch(tournament, matchId, court))); + return ResponseEntity.ok(tournamentMapper.toDto(tournamentPlayService.startMatch(tournament, matchId, court, counter))); } @PostMapping("/tournaments/{tournamentId}/matches/{matchId}/stop") diff --git a/src/main/java/nl/connectedit/swiss/domain/entity/Match.java b/src/main/java/nl/connectedit/swiss/domain/entity/Match.java index 13dac9a..393d5cb 100644 --- a/src/main/java/nl/connectedit/swiss/domain/entity/Match.java +++ b/src/main/java/nl/connectedit/swiss/domain/entity/Match.java @@ -39,6 +39,9 @@ public class Match extends AbstractEntity { private Long court; + @ManyToOne + private Player counter; + @OneToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY) private List games;// = new ArrayList<>(); diff --git a/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayer.java b/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayer.java index 4465734..e092098 100644 --- a/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayer.java +++ b/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayer.java @@ -28,4 +28,8 @@ public class TournamentPlayer extends AbstractEntity { private boolean paid; private boolean present; + + private boolean counting; + + private Long counts; } diff --git a/src/main/java/nl/connectedit/swiss/dto/MatchDto.java b/src/main/java/nl/connectedit/swiss/dto/MatchDto.java index 5f8dc61..b8432a5 100644 --- a/src/main/java/nl/connectedit/swiss/dto/MatchDto.java +++ b/src/main/java/nl/connectedit/swiss/dto/MatchDto.java @@ -29,4 +29,6 @@ public class MatchDto extends AbstractDto { private LocalDateTime endTime; private Long court; + + private PlayerDto counter; } diff --git a/src/main/java/nl/connectedit/swiss/dto/TournamentPlayerDto.java b/src/main/java/nl/connectedit/swiss/dto/TournamentPlayerDto.java index c81f70b..6a18dfe 100644 --- a/src/main/java/nl/connectedit/swiss/dto/TournamentPlayerDto.java +++ b/src/main/java/nl/connectedit/swiss/dto/TournamentPlayerDto.java @@ -20,4 +20,8 @@ public class TournamentPlayerDto extends AbstractDto { private Boolean present; + private Boolean counting; + + private Long counts; + } diff --git a/src/main/java/nl/connectedit/swiss/mapper/MatchMapper.java b/src/main/java/nl/connectedit/swiss/mapper/MatchMapper.java index aad9617..cc13df9 100644 --- a/src/main/java/nl/connectedit/swiss/mapper/MatchMapper.java +++ b/src/main/java/nl/connectedit/swiss/mapper/MatchMapper.java @@ -13,6 +13,8 @@ public class MatchMapper implements DtoMapper { private final GameMapper gameMapper; + private final PlayerMapper playerMapper; + @Override public MatchDto toDto(Match match) { var matchDto = new MatchDto(); @@ -25,6 +27,9 @@ public class MatchMapper implements DtoMapper { matchDto.setStartTime(match.getStartTime()); matchDto.setEndTime(match.getEndTime()); matchDto.setCourt(match.getCourt()); + if (match.getCounter() != null) { + matchDto.setCounter(playerMapper.toDto(match.getCounter())); + } if (match.getGames() != null) { matchDto.setGames( diff --git a/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java b/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java index 5a28201..722d514 100644 --- a/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java +++ b/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java @@ -13,8 +13,6 @@ import java.util.ArrayList; @RequiredArgsConstructor public class TournamentPlayerMapper implements DtoMapper { - private final PlayerMapper playerMapper; - @Override public TournamentPlayerDto toDto(TournamentPlayer tournamentPlayer) { var tournamentPlayerDto = new TournamentPlayerDto(); @@ -23,6 +21,8 @@ public class TournamentPlayerMapper implements DtoMapper(tournamentPlayer.getEvents())); tournamentPlayerDto.setPaid(tournamentPlayer.isPaid()); tournamentPlayerDto.setPresent(tournamentPlayer.isPresent()); + tournamentPlayerDto.setCounting(tournamentPlayer.isCounting()); + tournamentPlayerDto.setCounts(tournamentPlayer.getCounts()); return tournamentPlayerDto; } diff --git a/src/main/java/nl/connectedit/swiss/service/TournamentPlayService.java b/src/main/java/nl/connectedit/swiss/service/TournamentPlayService.java index 47cdf69..df2289c 100644 --- a/src/main/java/nl/connectedit/swiss/service/TournamentPlayService.java +++ b/src/main/java/nl/connectedit/swiss/service/TournamentPlayService.java @@ -166,26 +166,39 @@ public class TournamentPlayService { return false; } - private boolean playerHasSkippedRoundBefore(Player player, Tournament tournament) { - var hasSkippedRound = false; - - return hasSkippedRound; - } - - public Tournament startMatch(Tournament tournament, Long matchId, Long court) { + public Tournament startMatch(Tournament tournament, Long matchId, Long court, Long counter) { var match = getMatch(tournament, matchId); match.setStatus(Status.IN_PROGRESS); match.setStartTime(LocalDateTime.now()); match.setCourt(court); + + var countingPlayer = getPlayer(tournament, counter); + countingPlayer.setCounting(true); + match.setCounter(countingPlayer.getPlayer()); + tournamentRepository.save(tournament); return tournament; } + private TournamentPlayer getPlayer(Tournament tournament, Long playerId) { + for (var tournamentPlayer : tournament.getTournamentPlayers()) { + if (playerId.equals(tournamentPlayer.getPlayer().getId())) { + return tournamentPlayer; + } + } + return null; + } + public Tournament stopMatch(Tournament tournament, Long matchId) { var match = getMatch(tournament, matchId); match.setStatus(Status.NOT_STARTED); match.setStartTime(null); match.setCourt(null); + + var countingPlayer = getPlayer(tournament, match.getCounter().getId()); + countingPlayer.setCounting(false); + match.setCounter(null); + tournamentRepository.save(tournament); return tournament; } @@ -200,6 +213,10 @@ public class TournamentPlayService { match.getGames().clear(); match.getGames().addAll(resultToGames(result, match)); + var countingPlayer = getPlayer(tournament, match.getCounter().getId()); + countingPlayer.setCounting(false); + match.setCounter(null); + tournamentRepository.save(tournament); return tournament; }