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