mirror of
https://github.com/AJMicke/KickerELO.git
synced 2026-03-11 05:21:07 +01:00
Add 2vs2 stats to API
This commit is contained in:
@@ -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)
|
||||
));
|
||||
}
|
||||
}
|
||||
14
src/main/java/org/kickerelo/kickerelo/api/Stat2vs2DTO.java
Normal file
14
src/main/java/org/kickerelo/kickerelo/api/Stat2vs2DTO.java
Normal 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
|
||||
) {
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package org.kickerelo.kickerelo.util;
|
||||
|
||||
public enum Position {
|
||||
FRONT, BACK
|
||||
FRONT, BACK, BOTH
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user