From 4ed29fb20ec18072b4670c605bc54507fc4061e3 Mon Sep 17 00:00:00 2001 From: Anton Micke Date: Fri, 30 May 2025 15:36:56 +0200 Subject: [PATCH] Use Spieler entities instead of names for Enter result views --- .../org/kickerelo/kickerelo/data/Spieler.java | 6 ++ .../kickerelo/service/KickerEloService.java | 59 ++++++------------- .../kickerelo/views/Enter1vs1View.java | 9 +-- .../kickerelo/views/Enter2vs2View.java | 17 +++--- 4 files changed, 39 insertions(+), 52 deletions(-) diff --git a/src/main/java/org/kickerelo/kickerelo/data/Spieler.java b/src/main/java/org/kickerelo/kickerelo/data/Spieler.java index 257b16f..db2843e 100644 --- a/src/main/java/org/kickerelo/kickerelo/data/Spieler.java +++ b/src/main/java/org/kickerelo/kickerelo/data/Spieler.java @@ -69,4 +69,10 @@ public class Spieler { public String toString() { return this.name; } + + @Override + public boolean equals(Object o) { + if (!(o instanceof Spieler)) return false; + return this.id == ((Spieler) o).id; + } } diff --git a/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java b/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java index 75658e2..f7d9ea0 100644 --- a/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java +++ b/src/main/java/org/kickerelo/kickerelo/service/KickerEloService.java @@ -2,7 +2,6 @@ package org.kickerelo.kickerelo.service; import org.kickerelo.kickerelo.exception.DuplicatePlayerException; import org.kickerelo.kickerelo.exception.InvalidDataException; -import org.kickerelo.kickerelo.exception.NoSuchPlayerException; import org.kickerelo.kickerelo.data.Ergebnis1vs1; import org.kickerelo.kickerelo.data.Ergebnis2vs2; import org.kickerelo.kickerelo.data.Spieler; @@ -50,63 +49,55 @@ public class KickerEloService { /** * Enter a result of a 1 vs 1 game - * @param gewinnerName The name of the winning player - * @param verliererName The name of the losing player + * @param gewinner The winning player + * @param verlierer The losing player * @param toreVerlierer The number of goals of the loser */ - public void enterResult1vs1(String gewinnerName, String verliererName, + public void enterResult1vs1(Spieler gewinner, Spieler verlierer, short toreVerlierer) { // Check if the inputs are valid - if (gewinnerName == null || verliererName == null) { + if (gewinner == null || verlierer == null) { throw new PlayerNameNotSetException("Alle Namen müssen gesetzt sein"); } - if (gewinnerName.equals(verliererName)) { + if (gewinner.equals(verlierer)) { throw new DuplicatePlayerException("winner and loser identical"); } if (toreVerlierer > 9 || toreVerlierer < 0) { throw new InvalidDataException("too many goals"); } - Spieler gewinner = spielerRepository.findByName(gewinnerName) - .orElseThrow(() -> new NoSuchPlayerException(gewinnerName)); - - Spieler verlierer = spielerRepository.findByName(verliererName) - .orElseThrow(() -> new NoSuchPlayerException(verliererName)); - - Ergebnis1vs1 ergebnis = new Ergebnis1vs1(gewinner, verlierer, toreVerlierer); ergebnis1vs1Repository.save(ergebnis); eloCalculationService.updateElo1vs1(gewinner, verlierer, toreVerlierer); spielerRepository.save(gewinner); spielerRepository.save(verlierer); - } /** * Enter the result of a 2 vs 2 game - * @param gewinnerNameVorn Name of the winning offensive player - * @param gewinnerNameHinten Name of the winning defensive player - * @param verliererNameVorn Name of the losing offensive player - * @param verliererNameHinten Name of the losing defensive player + * @param gewinnerVorn winning offensive player + * @param gewinnerHinten winning defensive player + * @param verliererVorn losing offensive player + * @param verliererHinten losing defensive player * @param toreVerlierer Number of goals of the losing team */ - public void enterResult2vs2(String gewinnerNameVorn, String gewinnerNameHinten, - String verliererNameVorn, String verliererNameHinten, + public void enterResult2vs2(Spieler gewinnerVorn, Spieler gewinnerHinten, + Spieler verliererVorn, Spieler verliererHinten, short toreVerlierer) { // Check if the inputs are valid - if (gewinnerNameVorn == null || gewinnerNameHinten == null - || verliererNameVorn == null || verliererNameHinten == null) { + if (gewinnerVorn == null || gewinnerHinten == null + || verliererVorn == null || verliererHinten == null) { throw new PlayerNameNotSetException("Alle Namen müssen gesetzt sein"); } - if (gewinnerNameVorn.equals(gewinnerNameHinten) || - gewinnerNameVorn.equals(verliererNameVorn) || - gewinnerNameVorn.equals(verliererNameHinten) || - gewinnerNameHinten.equals(verliererNameVorn) || - gewinnerNameHinten.equals(verliererNameHinten) || - verliererNameVorn.equals(verliererNameHinten)) { + if (gewinnerVorn.equals(gewinnerHinten) || + gewinnerVorn.equals(verliererVorn) || + gewinnerVorn.equals(verliererHinten) || + gewinnerHinten.equals(verliererVorn) || + gewinnerHinten.equals(verliererHinten) || + verliererVorn.equals(verliererHinten)) { throw new DuplicatePlayerException("players must not be identical"); } @@ -114,18 +105,6 @@ public class KickerEloService { throw new InvalidDataException("too many loser goals"); } - Spieler gewinnerVorn = spielerRepository.findByName(gewinnerNameVorn) - .orElseThrow(() -> new NoSuchPlayerException(gewinnerNameVorn)); - - Spieler gewinnerHinten = spielerRepository.findByName(gewinnerNameHinten) - .orElseThrow(() -> new NoSuchPlayerException(gewinnerNameHinten)); - - Spieler verliererVorn = spielerRepository.findByName(verliererNameVorn) - .orElseThrow(() -> new NoSuchPlayerException(verliererNameVorn)); - - Spieler verliererHinten = spielerRepository.findByName(verliererNameHinten) - .orElseThrow(() -> new NoSuchPlayerException(verliererNameHinten)); - Ergebnis2vs2 ergebnis = new Ergebnis2vs2(gewinnerVorn, gewinnerHinten, verliererVorn, verliererHinten, toreVerlierer); ergebnis2vs2Repository.save(ergebnis); diff --git a/src/main/java/org/kickerelo/kickerelo/views/Enter1vs1View.java b/src/main/java/org/kickerelo/kickerelo/views/Enter1vs1View.java index 016d00d..e4ceb54 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/Enter1vs1View.java +++ b/src/main/java/org/kickerelo/kickerelo/views/Enter1vs1View.java @@ -8,6 +8,7 @@ import com.vaadin.flow.component.notification.NotificationVariant; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.textfield.IntegerField; import com.vaadin.flow.router.Route; +import org.kickerelo.kickerelo.data.Spieler; import org.kickerelo.kickerelo.exception.DuplicatePlayerException; import org.kickerelo.kickerelo.exception.InvalidDataException; import org.kickerelo.kickerelo.exception.NoSuchPlayerException; @@ -20,12 +21,12 @@ public class Enter1vs1View extends VerticalLayout { public Enter1vs1View(KickerEloService eloService) { H2 subheading = new H2("1 vs 1 Ergebnis"); - ComboBox winnerSelect = new ComboBox<>("Gewinner"); - winnerSelect.setItems(eloService.getSpielerNamen()); + ComboBox winnerSelect = new ComboBox<>("Gewinner"); + winnerSelect.setItems(eloService.getSpielerEntities()); winnerSelect.setPlaceholder("Spieler auswählen"); - ComboBox loserSelect = new ComboBox<>("Verlierer"); - loserSelect.setItems(eloService.getSpielerNamen()); + ComboBox loserSelect = new ComboBox<>("Verlierer"); + loserSelect.setItems(eloService.getSpielerEntities()); loserSelect.setPlaceholder("Spieler auswählen"); IntegerField loserGoals = new IntegerField("Tore des Verlierers"); diff --git a/src/main/java/org/kickerelo/kickerelo/views/Enter2vs2View.java b/src/main/java/org/kickerelo/kickerelo/views/Enter2vs2View.java index 23829bc..e354255 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/Enter2vs2View.java +++ b/src/main/java/org/kickerelo/kickerelo/views/Enter2vs2View.java @@ -8,6 +8,7 @@ import com.vaadin.flow.component.notification.NotificationVariant; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.textfield.IntegerField; import com.vaadin.flow.router.Route; +import org.kickerelo.kickerelo.data.Spieler; import org.kickerelo.kickerelo.exception.DuplicatePlayerException; import org.kickerelo.kickerelo.exception.InvalidDataException; import org.kickerelo.kickerelo.exception.NoSuchPlayerException; @@ -19,20 +20,20 @@ public class Enter2vs2View extends VerticalLayout { public Enter2vs2View(KickerEloService eloService) { H2 subheading = new H2("2 vs 2 Ergebnis"); - ComboBox winnerFrontSelect = new ComboBox<>("Gewinner vorne"); - winnerFrontSelect.setItems(eloService.getSpielerNamen()); + ComboBox winnerFrontSelect = new ComboBox<>("Gewinner vorne"); + winnerFrontSelect.setItems(eloService.getSpielerEntities()); winnerFrontSelect.setPlaceholder("Spieler auswählen"); - ComboBox winnerBackSelect = new ComboBox<>("Gewinner hinten"); - winnerBackSelect.setItems(eloService.getSpielerNamen()); + ComboBox winnerBackSelect = new ComboBox<>("Gewinner hinten"); + winnerBackSelect.setItems(eloService.getSpielerEntities()); winnerBackSelect.setPlaceholder("Spieler auswählen"); - ComboBox loserFrontSelect = new ComboBox<>("Verlierer vorne"); - loserFrontSelect.setItems(eloService.getSpielerNamen()); + ComboBox loserFrontSelect = new ComboBox<>("Verlierer vorne"); + loserFrontSelect.setItems(eloService.getSpielerEntities()); loserFrontSelect.setPlaceholder("Spieler auswählen"); - ComboBox loserBackSelect = new ComboBox<>("Verlierer hinten"); - loserBackSelect.setItems(eloService.getSpielerNamen()); + ComboBox loserBackSelect = new ComboBox<>("Verlierer hinten"); + loserBackSelect.setItems(eloService.getSpielerEntities()); loserBackSelect.setPlaceholder("Spieler auswählen"); IntegerField loserGoals = new IntegerField("Tore des Verlierers");