From d581b6381a9e59f2790719fd20a80c569431418d Mon Sep 17 00:00:00 2001 From: Anton Micke Date: Sun, 20 Jul 2025 21:53:48 +0200 Subject: [PATCH] Add 2vs2 stats to API --- .../kickerelo/api/Stat2vs2Controller.java | 44 +++++++++++++++++++ .../kickerelo/kickerelo/api/Stat2vs2DTO.java | 14 ++++++ .../repository/Ergebnis2vs2Repository.java | 2 + .../kickerelo/service/Stat2vs2Service.java | 4 ++ .../kickerelo/kickerelo/util/Position.java | 2 +- 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/kickerelo/kickerelo/api/Stat2vs2Controller.java create mode 100644 src/main/java/org/kickerelo/kickerelo/api/Stat2vs2DTO.java diff --git a/src/main/java/org/kickerelo/kickerelo/api/Stat2vs2Controller.java b/src/main/java/org/kickerelo/kickerelo/api/Stat2vs2Controller.java new file mode 100644 index 0000000..540440a --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/api/Stat2vs2Controller.java @@ -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 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) + )); + } +} diff --git a/src/main/java/org/kickerelo/kickerelo/api/Stat2vs2DTO.java b/src/main/java/org/kickerelo/kickerelo/api/Stat2vs2DTO.java new file mode 100644 index 0000000..6748506 --- /dev/null +++ b/src/main/java/org/kickerelo/kickerelo/api/Stat2vs2DTO.java @@ -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 +) { +} diff --git a/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java b/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java index a201c56..1189945 100644 --- a/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java +++ b/src/main/java/org/kickerelo/kickerelo/repository/Ergebnis2vs2Repository.java @@ -15,6 +15,8 @@ public interface Ergebnis2vs2Repository extends JpaRepository