mirror of
https://github.com/AJMicke/KickerELO.git
synced 2026-03-11 13:31:02 +01:00
Add current streak to Stat2vs2View
This commit is contained in:
@@ -7,6 +7,8 @@ import org.springframework.data.jpa.repository.Query;
|
|||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface Ergebnis2vs2Repository extends JpaRepository<Ergebnis2vs2, Long> {
|
public interface Ergebnis2vs2Repository extends JpaRepository<Ergebnis2vs2, Long> {
|
||||||
int countByGewinnerHinten(Spieler gewinnerHinten);
|
int countByGewinnerHinten(Spieler gewinnerHinten);
|
||||||
@@ -24,4 +26,7 @@ public interface Ergebnis2vs2Repository extends JpaRepository<Ergebnis2vs2, Long
|
|||||||
|
|
||||||
@Query("select avg(case when e.verliererHinten = :s then (e.toreVerlierer - 10) when e.gewinnerHinten = :s then (10 - e.toreVerlierer) end) from Ergebnis2vs2 e where e.gewinnerHinten = :s or e.verliererHinten = :s")
|
@Query("select avg(case when e.verliererHinten = :s then (e.toreVerlierer - 10) when e.gewinnerHinten = :s then (10 - e.toreVerlierer) end) from Ergebnis2vs2 e where e.gewinnerHinten = :s or e.verliererHinten = :s")
|
||||||
Float avgGoalDiffBack(@Param("s") Spieler s);
|
Float avgGoalDiffBack(@Param("s") Spieler s);
|
||||||
|
|
||||||
|
@Query("select e from Ergebnis2vs2 e where (:s = e.verliererHinten or :s = e.verliererVorn or :s = e.gewinnerHinten or :s = e.gewinnerVorn) order by e.timestamp desc")
|
||||||
|
List<Ergebnis2vs2> getResultsForSpieler(@Param("s") Spieler s);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package org.kickerelo.kickerelo.service;
|
package org.kickerelo.kickerelo.service;
|
||||||
|
|
||||||
|
import org.kickerelo.kickerelo.data.Ergebnis2vs2;
|
||||||
import org.kickerelo.kickerelo.data.Spieler;
|
import org.kickerelo.kickerelo.data.Spieler;
|
||||||
import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository;
|
import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository;
|
||||||
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
||||||
import org.kickerelo.kickerelo.util.Position;
|
import org.kickerelo.kickerelo.util.Position;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class Stat2vs2Service {
|
public class Stat2vs2Service {
|
||||||
Ergebnis2vs2Repository ergebnis2vs2Repository;
|
Ergebnis2vs2Repository ergebnis2vs2Repository;
|
||||||
@@ -39,4 +42,19 @@ public class Stat2vs2Service {
|
|||||||
int numAll = ergebnis2vs2Repository.countByGewinnerVornOrGewinnerHintenOrVerliererVornOrVerliererHinten(s, s, s, s);
|
int numAll = ergebnis2vs2Repository.countByGewinnerVornOrGewinnerHintenOrVerliererVornOrVerliererHinten(s, s, s, s);
|
||||||
return (float) numFront / numAll;
|
return (float) numFront / numAll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getStreak(Spieler s) {
|
||||||
|
List<Ergebnis2vs2> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public class Stat2vs2View extends VerticalLayout {
|
|||||||
NativeLabel winRateBackText = new NativeLabel();
|
NativeLabel winRateBackText = new NativeLabel();
|
||||||
Paragraph goalDiffBack = new Paragraph();
|
Paragraph goalDiffBack = new Paragraph();
|
||||||
Paragraph goalDiffFront = new Paragraph();
|
Paragraph goalDiffFront = new Paragraph();
|
||||||
|
Paragraph streak = new Paragraph();
|
||||||
|
|
||||||
public Stat2vs2View(Stat2vs2Service service, KickerEloService kickerService, Ergebnis2vs2Repository repo) {
|
public Stat2vs2View(Stat2vs2Service service, KickerEloService kickerService, Ergebnis2vs2Repository repo) {
|
||||||
this.stat2vs2Service = service;
|
this.stat2vs2Service = service;
|
||||||
@@ -40,7 +41,7 @@ public class Stat2vs2View extends VerticalLayout {
|
|||||||
selector = new ComboBox<>("Spieler");
|
selector = new ComboBox<>("Spieler");
|
||||||
selector.setItems(kickerService.getSpielerEntities());
|
selector.setItems(kickerService.getSpielerEntities());
|
||||||
selector.addValueChangeListener(event -> updateData(selector.getValue()));
|
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) {
|
private void updateData(Spieler s) {
|
||||||
@@ -49,6 +50,7 @@ public class Stat2vs2View extends VerticalLayout {
|
|||||||
updateFrontWinrate(s);
|
updateFrontWinrate(s);
|
||||||
updateBackWinrate(s);
|
updateBackWinrate(s);
|
||||||
updateGoalDiffs(s);
|
updateGoalDiffs(s);
|
||||||
|
updateStreak(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateGeneralInfo(Spieler 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));
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user