diff --git a/src/main/java/nl/connectedit/swiss/controller/TournamentController.java b/src/main/java/nl/connectedit/swiss/controller/TournamentController.java index 2e2be69..3453d7e 100755 --- a/src/main/java/nl/connectedit/swiss/controller/TournamentController.java +++ b/src/main/java/nl/connectedit/swiss/controller/TournamentController.java @@ -6,6 +6,7 @@ import nl.connectedit.swiss.domain.TournamentStatus; import nl.connectedit.swiss.domain.entity.Tournament; import nl.connectedit.swiss.dto.ResultDto; import nl.connectedit.swiss.dto.TournamentDto; +import nl.connectedit.swiss.dto.TournamentPlayerSubstitutionDto; import nl.connectedit.swiss.dto.TournamentValidationDto; import nl.connectedit.swiss.mapper.TournamentMapper; import nl.connectedit.swiss.mapper.TournamentValidationMapper; @@ -196,10 +197,10 @@ public class TournamentController { return ResponseEntity.noContent().build(); } - @PostMapping("/tournaments/{tournamentId}/players/{playerId}/event/{eventId}/substitute/{substituteId}") - public ResponseEntity substitutePlayer(@PathVariable Long tournamentId, @PathVariable Long playerId, @PathVariable Long eventId, @PathVariable Long substituteId) { + @PostMapping("/tournaments/{tournamentId}/players/{playerId}/substitutions") + public ResponseEntity substitutePlayer(@PathVariable Long tournamentId, @PathVariable Long playerId, @RequestBody TournamentPlayerSubstitutionDto[] substitutions) { var tournament = tournamentService.findTournamentById(tournamentId); - return ResponseEntity.ok(tournamentMapper.toDto(tournamentPlayService.substitutePlayer(tournament, eventId, playerId, substituteId))); + return ResponseEntity.ok(tournamentMapper.toDto(tournamentPlayService.playerSubstitutions(tournament, playerId, substitutions))); } } diff --git a/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayerSubstitution.java b/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayerSubstitution.java index a257328..ec65e26 100644 --- a/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayerSubstitution.java +++ b/src/main/java/nl/connectedit/swiss/domain/entity/TournamentPlayerSubstitution.java @@ -16,8 +16,8 @@ public class TournamentPlayerSubstitution extends AbstractEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne - private TournamentPlayer tournamentPlayer; +// @ManyToMany(mappedBy = "substitutions", fetch = FetchType.LAZY) +// private List tournamentPlayer; @ManyToOne private Event event; diff --git a/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java b/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java index e93d689..e1bb0a4 100644 --- a/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java +++ b/src/main/java/nl/connectedit/swiss/mapper/TournamentPlayerMapper.java @@ -38,6 +38,7 @@ public class TournamentPlayerMapper implements DtoMapper(); - tournamentPlayer.getSubstitutions().add(substitution); //TODO + for (var substitution : substitutions) { + var playerSubstitution = new TournamentPlayerSubstitution(); + + var eventType = EventType.valueOf(substitution.getEvent()); + var event = getEventByType(tournament, eventType); + playerSubstitution.setEvent(event); + + var substitute = getTournamentPlayer(tournament, substitution.getSubstitute().getPlayerId()); + playerSubstitution.setSubstitute(substitute); + playerSubstitutions.add(playerSubstitution); + } + + tournamentPlayer.setSubstitutions(playerSubstitutions); tournamentRepository.save(tournament); return tournament; @@ -208,6 +216,15 @@ public class TournamentPlayService { return null; } + private Event getEventByType(Tournament tournament, EventType eventType) { + for (var event : tournament.getEvents()) { + if (event.getType().equals(eventType)) { + return event; + } + } + return null; + } + private static class ConflictInDrawException extends RuntimeException {} diff --git a/src/main/resources/application-local-postgres.yaml b/src/main/resources/application-local-postgres.yaml index ebcea17..76c0f86 100755 --- a/src/main/resources/application-local-postgres.yaml +++ b/src/main/resources/application-local-postgres.yaml @@ -6,7 +6,7 @@ spring: # - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration # - org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration datasource: - url: jdbc:postgresql://localhost:5432/postgres?currentSchema=swiss + url: jdbc:postgresql://localhost:5432/postgres?currentSchema=swiss2 username: ${DB_USERNAME:postgres} password: ${DB_PASSWORD:postgres} flyway: diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 78de0e4..40dbcee 100755 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -11,7 +11,7 @@ spring: password: ${DB_PASSWORD:postgres} jpa: hibernate: - ddl-auto: none + ddl-auto: update flyway: url: jdbc:postgresql://${DB_URL:localhost:5432}/${DB_NAME}?currentSchema=swiss user: ${DB_USERNAME:postgres}