5
0
mirror of https://github.com/AJMicke/KickerELO.git synced 2026-03-11 13:31:02 +01:00

Use Spieler entities instead of names for Enter result views

This commit is contained in:
Anton Micke
2025-05-30 15:36:56 +02:00
parent e9cacbf0b4
commit 1a835ce3cc
4 changed files with 39 additions and 52 deletions

View File

@@ -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;
}
}

View File

@@ -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);

View File

@@ -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<String> winnerSelect = new ComboBox<>("Gewinner");
winnerSelect.setItems(eloService.getSpielerNamen());
ComboBox<Spieler> winnerSelect = new ComboBox<>("Gewinner");
winnerSelect.setItems(eloService.getSpielerEntities());
winnerSelect.setPlaceholder("Spieler auswählen");
ComboBox<String> loserSelect = new ComboBox<>("Verlierer");
loserSelect.setItems(eloService.getSpielerNamen());
ComboBox<Spieler> loserSelect = new ComboBox<>("Verlierer");
loserSelect.setItems(eloService.getSpielerEntities());
loserSelect.setPlaceholder("Spieler auswählen");
IntegerField loserGoals = new IntegerField("Tore des Verlierers");

View File

@@ -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<String> winnerFrontSelect = new ComboBox<>("Gewinner vorne");
winnerFrontSelect.setItems(eloService.getSpielerNamen());
ComboBox<Spieler> winnerFrontSelect = new ComboBox<>("Gewinner vorne");
winnerFrontSelect.setItems(eloService.getSpielerEntities());
winnerFrontSelect.setPlaceholder("Spieler auswählen");
ComboBox<String> winnerBackSelect = new ComboBox<>("Gewinner hinten");
winnerBackSelect.setItems(eloService.getSpielerNamen());
ComboBox<Spieler> winnerBackSelect = new ComboBox<>("Gewinner hinten");
winnerBackSelect.setItems(eloService.getSpielerEntities());
winnerBackSelect.setPlaceholder("Spieler auswählen");
ComboBox<String> loserFrontSelect = new ComboBox<>("Verlierer vorne");
loserFrontSelect.setItems(eloService.getSpielerNamen());
ComboBox<Spieler> loserFrontSelect = new ComboBox<>("Verlierer vorne");
loserFrontSelect.setItems(eloService.getSpielerEntities());
loserFrontSelect.setPlaceholder("Spieler auswählen");
ComboBox<String> loserBackSelect = new ComboBox<>("Verlierer hinten");
loserBackSelect.setItems(eloService.getSpielerNamen());
ComboBox<Spieler> loserBackSelect = new ComboBox<>("Verlierer hinten");
loserBackSelect.setItems(eloService.getSpielerEntities());
loserBackSelect.setPlaceholder("Spieler auswählen");
IntegerField loserGoals = new IntegerField("Tore des Verlierers");