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

Add input checks for player names and duplicates.

This commit is contained in:
Anton Micke
2025-02-06 00:54:59 +01:00
parent 819e26407e
commit 3f890f06d8
7 changed files with 56 additions and 6 deletions

View File

@@ -9,6 +9,7 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.IntegerField; import com.vaadin.flow.component.textfield.IntegerField;
import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import org.kickerelo.kickerelo.exception.NoSuchPlayerException;
import org.kickerelo.kickerelo.service.KickerEloService; import org.kickerelo.kickerelo.service.KickerEloService;
/** /**

View File

@@ -0,0 +1,7 @@
package org.kickerelo.kickerelo.exception;
public class DuplicatePlayerException extends RuntimeException {
public DuplicatePlayerException(String message) {
super(message);
}
}

View File

@@ -1,4 +1,4 @@
package org.kickerelo.kickerelo; package org.kickerelo.kickerelo.exception;
public class NoSuchPlayerException extends RuntimeException { public class NoSuchPlayerException extends RuntimeException {
public NoSuchPlayerException(String message) { public NoSuchPlayerException(String message) {

View File

@@ -0,0 +1,7 @@
package org.kickerelo.kickerelo.exception;
public class PlayerNameNotSetException extends RuntimeException {
public PlayerNameNotSetException(String message) {
super(message);
}
}

View File

@@ -1,9 +1,11 @@
package org.kickerelo.kickerelo.service; package org.kickerelo.kickerelo.service;
import org.kickerelo.kickerelo.NoSuchPlayerException; import org.kickerelo.kickerelo.exception.DuplicatePlayerException;
import org.kickerelo.kickerelo.exception.NoSuchPlayerException;
import org.kickerelo.kickerelo.data.Ergebnis1vs1; import org.kickerelo.kickerelo.data.Ergebnis1vs1;
import org.kickerelo.kickerelo.data.Ergebnis2vs2; import org.kickerelo.kickerelo.data.Ergebnis2vs2;
import org.kickerelo.kickerelo.data.Spieler; import org.kickerelo.kickerelo.data.Spieler;
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
import org.kickerelo.kickerelo.model.ResultInfo1vs1; import org.kickerelo.kickerelo.model.ResultInfo1vs1;
import org.kickerelo.kickerelo.model.ResultInfo2vs2; import org.kickerelo.kickerelo.model.ResultInfo2vs2;
import org.kickerelo.kickerelo.repository.Ergebnis1vs1Repository; import org.kickerelo.kickerelo.repository.Ergebnis1vs1Repository;
@@ -31,6 +33,13 @@ public class KickerEloService {
public void enterResult1vs1(String gewinnerName, String verliererName, public void enterResult1vs1(String gewinnerName, String verliererName,
short toreVerlierer) { short toreVerlierer) {
if (gewinnerName == null || verliererName == null) {
throw new PlayerNameNotSetException("Alle Namen müssen gesetzt sein");
}
if (gewinnerName.equals(verliererName)) {
throw new DuplicatePlayerException("winner and loser identical");
}
Spieler gewinner = spielerRepository.findByName(gewinnerName) Spieler gewinner = spielerRepository.findByName(gewinnerName)
.orElseThrow(() -> new NoSuchPlayerException(gewinnerName)); .orElseThrow(() -> new NoSuchPlayerException(gewinnerName));
@@ -56,6 +65,20 @@ public class KickerEloService {
String verliererNameVorn, String verliererNameHinten, String verliererNameVorn, String verliererNameHinten,
short toreVerlierer) { short toreVerlierer) {
if (gewinnerNameVorn == null || gewinnerNameHinten == null
|| verliererNameVorn == null || verliererNameHinten == 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)) {
throw new DuplicatePlayerException("players must not be identical");
}
Spieler gewinnerVorn = spielerRepository.findByName(gewinnerNameVorn) Spieler gewinnerVorn = spielerRepository.findByName(gewinnerNameVorn)
.orElseThrow(() -> new NoSuchPlayerException(gewinnerNameVorn)); .orElseThrow(() -> new NoSuchPlayerException(gewinnerNameVorn));

View File

@@ -8,7 +8,9 @@ import com.vaadin.flow.component.notification.NotificationVariant;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.IntegerField; import com.vaadin.flow.component.textfield.IntegerField;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import org.kickerelo.kickerelo.NoSuchPlayerException; import org.kickerelo.kickerelo.exception.DuplicatePlayerException;
import org.kickerelo.kickerelo.exception.NoSuchPlayerException;
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
import org.kickerelo.kickerelo.service.KickerEloService; import org.kickerelo.kickerelo.service.KickerEloService;
@Route(value = "enter1vs1") @Route(value = "enter1vs1")
@@ -36,7 +38,11 @@ public class Enter1vs1View extends VerticalLayout {
eloService.enterResult1vs1(winnerSelect.getValue(), loserSelect.getValue(), loserGoals.getValue().shortValue()); eloService.enterResult1vs1(winnerSelect.getValue(), loserSelect.getValue(), loserGoals.getValue().shortValue());
Notification.show("Gespeichert").addThemeVariants(NotificationVariant.LUMO_SUCCESS); Notification.show("Gespeichert").addThemeVariants(NotificationVariant.LUMO_SUCCESS);
} catch (NoSuchPlayerException err) { } catch (NoSuchPlayerException err) {
Notification.show("Konnte nicht gespeichert werden").addThemeVariants(NotificationVariant.LUMO_ERROR); Notification.show("Unbekannter Spieler").addThemeVariants(NotificationVariant.LUMO_ERROR);
} catch (DuplicatePlayerException err) {
Notification.show("Alle Spieler müssen paarweise verschieden sein").addThemeVariants(NotificationVariant.LUMO_ERROR);
} catch (PlayerNameNotSetException err) {
Notification.show("Alle Spieler müssen gesetzt sein").addThemeVariants(NotificationVariant.LUMO_ERROR);
} }
}); });

View File

@@ -8,7 +8,9 @@ import com.vaadin.flow.component.notification.NotificationVariant;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.IntegerField; import com.vaadin.flow.component.textfield.IntegerField;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import org.kickerelo.kickerelo.NoSuchPlayerException; import org.kickerelo.kickerelo.exception.DuplicatePlayerException;
import org.kickerelo.kickerelo.exception.NoSuchPlayerException;
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
import org.kickerelo.kickerelo.service.KickerEloService; import org.kickerelo.kickerelo.service.KickerEloService;
@Route(value = "enter2vs2") @Route(value = "enter2vs2")
@@ -43,7 +45,11 @@ public class Enter2vs2View extends VerticalLayout {
eloService.enterResult2vs2(winnerFrontSelect.getValue(), winnerBackSelect.getValue(), loserFrontSelect.getValue(), loserBackSelect.getValue(), loserGoals.getValue().shortValue()); eloService.enterResult2vs2(winnerFrontSelect.getValue(), winnerBackSelect.getValue(), loserFrontSelect.getValue(), loserBackSelect.getValue(), loserGoals.getValue().shortValue());
Notification.show("Gespeichert").addThemeVariants(NotificationVariant.LUMO_SUCCESS); Notification.show("Gespeichert").addThemeVariants(NotificationVariant.LUMO_SUCCESS);
} catch (NoSuchPlayerException err) { } catch (NoSuchPlayerException err) {
Notification.show("Konnte nicht gespeichert werden").addThemeVariants(NotificationVariant.LUMO_ERROR); Notification.show("Unbekannter Spieler").addThemeVariants(NotificationVariant.LUMO_ERROR);
} catch (DuplicatePlayerException err) {
Notification.show("Alle Spieler müssen paarweise verschieden sein").addThemeVariants(NotificationVariant.LUMO_ERROR);
} catch (PlayerNameNotSetException err) {
Notification.show("Alle Spieler müssen gesetzt sein").addThemeVariants(NotificationVariant.LUMO_ERROR);
} }
}); });