5
0
mirror of https://github.com/AJMicke/KickerELO.git synced 2026-03-11 13:31:02 +01:00
This commit is contained in:
Anton Micke
2025-09-09 12:29:22 +02:00
committed by AJMicke
parent 1670901a57
commit b4b9742857
3 changed files with 31 additions and 44 deletions

View File

@@ -3,8 +3,10 @@ package org.kickerelo.kickerelo.repository;
import org.kickerelo.kickerelo.data.Spieler;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@@ -12,10 +14,23 @@ import java.util.Optional;
public interface SpielerRepository extends JpaRepository<Spieler, Long> {
Optional<Spieler> findByName(String name);
@Query("SELECT s FROM Spieler s WHERE EXISTS (SELECT 1 FROM Ergebnis1vs1 e WHERE e.gewinner=s OR e.verlierer=s)")
@Query("SELECT s FROM Spieler s WHERE EXISTS (SELECT 1 FROM Ergebnis1vs1 e WHERE e.gewinner=s OR e.verlierer=s) " +
"order by s.elo1vs1 desc ")
List<Spieler> getSpielerWith1vs1Games();
@Query("SELECT s FROM Spieler s WHERE EXISTS (SELECT 1 FROM Ergebnis2vs2 e " +
"WHERE e.gewinnerVorn=s OR e.verliererVorn=s OR e.gewinnerHinten=s OR e.verliererHinten=s)")
"WHERE e.gewinnerVorn=s OR e.verliererVorn=s OR e.gewinnerHinten=s OR e.verliererHinten=s) " +
"order by s.elo2vs2 desc")
List<Spieler> getSpielerWith2vs2Games();
@Query("select distinct s from Spieler s join Ergebnis1vs1 e on (s = e.verlierer or s = e.gewinner) " +
"where e.timestamp >= :dateTime " +
"order by s.elo1vs1 desc")
List<Spieler> getSpielerWith1vs1GamesSince(@Param("dateTime") LocalDateTime dateTime);
@Query("select distinct s from Spieler s join Ergebnis2vs2 e " +
"on (s = e.verliererVorn or s = e.gewinnerVorn or s = e.verliererHinten or s = e.gewinnerHinten) " +
"where e.timestamp >= :dateTime " +
"order by s.elo2vs2 desc")
List<Spieler> getSpielerWith2vs2GamesSince(@Param("dateTime") LocalDateTime dateTime);
}

View File

@@ -4,23 +4,19 @@ import com.vaadin.flow.component.checkbox.Checkbox;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
import org.kickerelo.kickerelo.repository.Ergebnis1vs1Repository;
import org.kickerelo.kickerelo.data.Spieler;
import org.kickerelo.kickerelo.repository.SpielerRepository;
import org.kickerelo.kickerelo.util.comparator.Spieler1vs1EloComparator;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
@Route("graph1vs1")
public class Graph1vs1View extends VerticalLayout {
private final Ergebnis1vs1Repository ergebnisRepository;
private final SpielerRepository spielerRepository;
private Chart chart;
public Graph1vs1View(Ergebnis1vs1Repository ergebnisRepository, SpielerRepository spielerRepository) {
this.ergebnisRepository = ergebnisRepository;
public Graph1vs1View(SpielerRepository spielerRepository) {
this.spielerRepository = spielerRepository;
setSizeFull();
H2 subheading = new H2("1 vs 1 Elo");
@@ -43,22 +39,12 @@ public class Graph1vs1View extends VerticalLayout {
List<String> names = new ArrayList<>();
List<Float> elo = new ArrayList<>();
spielerRepository.getSpielerWith1vs1Games().stream()
.filter((spieler) -> {
if (!onlyActive) {
return true;
}
List<Spieler> spieler = (onlyActive) ?
spielerRepository.getSpielerWith1vs1GamesSince(LocalDateTime.now().minusWeeks(4))
: spielerRepository.getSpielerWith1vs1Games();
spieler.forEach((s) -> {names.add(s.getName()); elo.add(s.getElo1vs1());});
var results = ergebnisRepository.getResultsForSpieler(spieler);
return results.stream().anyMatch((result) -> {
var twoWeeksAgo = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).minusWeeks(2);
return result.getTimestamp().isAfter(twoWeeksAgo);
});
})
.sorted(new Spieler1vs1EloComparator()).forEach((s) -> {
names.add(s.getName());
elo.add(s.getElo1vs1());
});
return new Chart(names, elo);
}
}

View File

@@ -4,23 +4,19 @@ import com.vaadin.flow.component.checkbox.Checkbox;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository;
import org.kickerelo.kickerelo.data.Spieler;
import org.kickerelo.kickerelo.repository.SpielerRepository;
import org.kickerelo.kickerelo.util.comparator.Spieler2vs2EloComparator;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
@Route("graph2vs2")
public class Graph2vs2View extends VerticalLayout {
private final Ergebnis2vs2Repository ergebnisRepository;
private final SpielerRepository spielerRepository;
private Chart chart;
public Graph2vs2View(Ergebnis2vs2Repository ergebnisRepository, SpielerRepository spielerRepository) {
this.ergebnisRepository = ergebnisRepository;
public Graph2vs2View(SpielerRepository spielerRepository) {
this.spielerRepository = spielerRepository;
setSizeFull();
H2 subheading = new H2("2 vs 2 Elo");
@@ -43,22 +39,12 @@ public class Graph2vs2View extends VerticalLayout {
List<String> names = new ArrayList<>();
List<Float> elo = new ArrayList<>();
spielerRepository.getSpielerWith2vs2Games().stream()
.filter((spieler) -> {
if (!onlyActive) {
return true;
}
List<Spieler> spieler = (onlyActive) ?
spielerRepository.getSpielerWith2vs2GamesSince(LocalDateTime.now().minusWeeks(4))
: spielerRepository.getSpielerWith2vs2Games();
spieler.forEach((s) -> {names.add(s.getName()); elo.add(s.getElo2vs2());});
var results = ergebnisRepository.getResultsForSpieler(spieler);
return results.stream().anyMatch((result) -> {
var twoWeeksAgo = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).minusWeeks(2);
return result.getTimestamp().isAfter(twoWeeksAgo);
});
})
.sorted(new Spieler2vs2EloComparator()).forEach((s) -> {
names.add(s.getName());
elo.add(s.getElo2vs2());
});
return new Chart(names, elo);
}
}