From 37f6a2be006f09f165301951aaec3367b3b2b7a4 Mon Sep 17 00:00:00 2001 From: Anton Micke Date: Wed, 9 Jul 2025 14:56:40 +0200 Subject: [PATCH] Add current streak to Stat2vs2View --- .../repository/Ergebnis2vs2Repository.java | 5 +++++ .../kickerelo/service/Stat2vs2Service.java | 18 ++++++++++++++++++ .../kickerelo/views/Stat2vs2View.java | 9 ++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java b/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java index 8e8f7e9..a201c56 100644 --- a/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java +++ b/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java @@ -7,6 +7,8 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface Ergebnis2vs2Repository extends JpaRepository { int countByGewinnerHinten(Spieler gewinnerHinten); @@ -24,4 +26,7 @@ public interface Ergebnis2vs2Repository extends JpaRepository getResultsForSpieler(@Param("s") Spieler s); } diff --git a/src/main/java/org/kickerelo/kickerelo/service/Stat2vs2Service.java b/src/main/java/org/kickerelo/kickerelo/service/Stat2vs2Service.java index 26094dc..2ba6344 100644 --- a/src/main/java/org/kickerelo/kickerelo/service/Stat2vs2Service.java +++ b/src/main/java/org/kickerelo/kickerelo/service/Stat2vs2Service.java @@ -1,11 +1,14 @@ package org.kickerelo.kickerelo.service; +import org.kickerelo.kickerelo.data.Ergebnis2vs2; import org.kickerelo.kickerelo.data.Spieler; import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository; import org.kickerelo.kickerelo.repository.SpielerRepository; import org.kickerelo.kickerelo.util.Position; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class Stat2vs2Service { Ergebnis2vs2Repository ergebnis2vs2Repository; @@ -39,4 +42,19 @@ public class Stat2vs2Service { int numAll = ergebnis2vs2Repository.countByGewinnerVornOrGewinnerHintenOrVerliererVornOrVerliererHinten(s, s, s, s); return (float) numFront / numAll; } + + + public int getStreak(Spieler s) { + List results = ergebnis2vs2Repository.getResultsForSpieler(s); + if (results.isEmpty()) return 0; + + boolean isWinStreak = isWinner(s, results.get(0)); + int number = (int) results.stream().takeWhile(x -> isWinner(s, x) == isWinStreak).count(); + + return number * (isWinStreak ? 1 : -1); + } + + protected boolean isWinner(Spieler s, Ergebnis2vs2 r) { + return r.getGewinnerVorn().equals(s) || r.getGewinnerHinten().equals(s); + } } diff --git a/src/main/java/org/kickerelo/kickerelo/views/Stat2vs2View.java b/src/main/java/org/kickerelo/kickerelo/views/Stat2vs2View.java index 5a02b0a..d9a2fee 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/Stat2vs2View.java +++ b/src/main/java/org/kickerelo/kickerelo/views/Stat2vs2View.java @@ -31,6 +31,7 @@ public class Stat2vs2View extends VerticalLayout { NativeLabel winRateBackText = new NativeLabel(); Paragraph goalDiffBack = new Paragraph(); Paragraph goalDiffFront = new Paragraph(); + Paragraph streak = new Paragraph(); public Stat2vs2View(Stat2vs2Service service, KickerEloService kickerService, Ergebnis2vs2Repository repo) { this.stat2vs2Service = service; @@ -40,7 +41,7 @@ public class Stat2vs2View extends VerticalLayout { selector = new ComboBox<>("Spieler"); selector.setItems(kickerService.getSpielerEntities()); selector.addValueChangeListener(event -> updateData(selector.getValue())); - add(subheading, selector, generalInfo, frontRateText, frontRate, winRateFrontText, winRateFront, winRateBackText, winRateBack, goalDiffBack, goalDiffFront); + add(subheading, selector, generalInfo, frontRateText, frontRate, winRateFrontText, winRateFront, winRateBackText, winRateBack, goalDiffBack, goalDiffFront, streak); } private void updateData(Spieler s) { @@ -49,6 +50,7 @@ public class Stat2vs2View extends VerticalLayout { updateFrontWinrate(s); updateBackWinrate(s); updateGoalDiffs(s); + updateStreak(s); } private void updateGeneralInfo(Spieler s) { @@ -92,4 +94,9 @@ public class Stat2vs2View extends VerticalLayout { goalDiffFront.setText(frontDiff == null || frontDiff.isNaN() ? text + "-" : text + String.format("%.2f", frontDiff)); } + + private void updateStreak(Spieler s) { + String text = "Aktueller Streak: "; + streak.setText(text + stat2vs2Service.getStreak(s)); + } }