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

Add 2vs2 stats to API

This commit is contained in:
Anton Micke
2025-07-20 21:53:48 +02:00
committed by AJMicke
parent a031213aab
commit d581b6381a
5 changed files with 65 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
package org.kickerelo.kickerelo.api;
import org.kickerelo.kickerelo.data.Spieler;
import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository;
import org.kickerelo.kickerelo.repository.SpielerRepository;
import org.kickerelo.kickerelo.service.Stat2vs2Service;
import org.kickerelo.kickerelo.util.Position;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/stats/2vs2")
public class Stat2vs2Controller {
private final Stat2vs2Service service;
private final SpielerRepository spielerRepository;
private final Ergebnis2vs2Repository ergebnis2vs2Repository;
public Stat2vs2Controller(Stat2vs2Service service, SpielerRepository spielerRepository, Ergebnis2vs2Repository ergebnis2vs2Repository) {
this.service = service;
this.spielerRepository = spielerRepository;
this.ergebnis2vs2Repository = ergebnis2vs2Repository;
}
@GetMapping("/{playerId}")
public ResponseEntity<Stat2vs2DTO> get2vs2StatsForPlayer(@PathVariable long playerId) {
Spieler s = spielerRepository.findById(playerId).orElse(null);
if (s == null) return ResponseEntity.noContent().build();
return ResponseEntity.ok(new Stat2vs2DTO(
s.getElo2vs2(),
ergebnis2vs2Repository.countByGewinnerVornOrGewinnerHintenOrVerliererVornOrVerliererHinten(s, s, s, s),
service.getWinrate(s, Position.BOTH),
service.getFrontRate(s),
service.getWinrate(s, Position.FRONT),
service.getWinrate(s, Position.BACK),
ergebnis2vs2Repository.avgGoalDiffBack(s),
ergebnis2vs2Repository.avgGoalDiffFront(s),
service.getStreak(s)
));
}
}

View File

@@ -0,0 +1,14 @@
package org.kickerelo.kickerelo.api;
public record Stat2vs2DTO(
Float elo,
int numGames,
Float winRate,
Float frontPercentile,
Float frontWinRate,
Float backWinRate,
Float goalDiffBack,
Float goalDiffFront,
int currentStreak
) {
}

View File

@@ -15,6 +15,8 @@ public interface Ergebnis2vs2Repository extends JpaRepository<Ergebnis2vs2, Long
int countByGewinnerVorn(Spieler gewinnerVon);
int countByVerliererHinten(Spieler verliererHinten);
int countByVerliererVorn(Spieler verlierVon);
int countByGewinnerVornOrGewinnerHinten(Spieler gewinnerVon, Spieler gewinnerHinten);
int countByVerliererVornOrVerliererHinten(Spieler verliererVon, Spieler verliererHinten);
int countByGewinnerVornOrGewinnerHintenOrVerliererVornOrVerliererHinten(Spieler gewinnerVon, Spieler gewinnerHinten,
Spieler verliererVon, Spieler verliererHinten);

View File

@@ -30,6 +30,10 @@ public class Stat2vs2Service {
wins = ergebnis2vs2Repository.countByGewinnerVorn(s);
losses = ergebnis2vs2Repository.countByVerliererVorn(s);
break;
case BOTH:
wins = ergebnis2vs2Repository.countByGewinnerVornOrGewinnerHinten(s, s);
losses = ergebnis2vs2Repository.countByVerliererVornOrVerliererHinten(s, s);
break;
default:
wins = 0;
losses = 0;

View File

@@ -1,5 +1,5 @@
package org.kickerelo.kickerelo.util;
public enum Position {
FRONT, BACK
FRONT, BACK, BOTH
}