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.kickerelo.kickerelo.data.Spieler;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -12,10 +14,23 @@ import java.util.Optional;
public interface SpielerRepository extends JpaRepository<Spieler, Long> { public interface SpielerRepository extends JpaRepository<Spieler, Long> {
Optional<Spieler> findByName(String name); 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(); List<Spieler> getSpielerWith1vs1Games();
@Query("SELECT s FROM Spieler s WHERE EXISTS (SELECT 1 FROM Ergebnis2vs2 e " + @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(); 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.html.H2;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route; 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.repository.SpielerRepository;
import org.kickerelo.kickerelo.util.comparator.Spieler1vs1EloComparator;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Route("graph1vs1") @Route("graph1vs1")
public class Graph1vs1View extends VerticalLayout { public class Graph1vs1View extends VerticalLayout {
private final Ergebnis1vs1Repository ergebnisRepository;
private final SpielerRepository spielerRepository; private final SpielerRepository spielerRepository;
private Chart chart; private Chart chart;
public Graph1vs1View(Ergebnis1vs1Repository ergebnisRepository, SpielerRepository spielerRepository) { public Graph1vs1View(SpielerRepository spielerRepository) {
this.ergebnisRepository = ergebnisRepository;
this.spielerRepository = spielerRepository; this.spielerRepository = spielerRepository;
setSizeFull(); setSizeFull();
H2 subheading = new H2("1 vs 1 Elo"); H2 subheading = new H2("1 vs 1 Elo");
@@ -43,22 +39,12 @@ public class Graph1vs1View extends VerticalLayout {
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
List<Float> elo = new ArrayList<>(); List<Float> elo = new ArrayList<>();
spielerRepository.getSpielerWith1vs1Games().stream() List<Spieler> spieler = (onlyActive) ?
.filter((spieler) -> { spielerRepository.getSpielerWith1vs1GamesSince(LocalDateTime.now().minusWeeks(4))
if (!onlyActive) { : spielerRepository.getSpielerWith1vs1Games();
return true;
} 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); 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.html.H2;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route; 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.repository.SpielerRepository;
import org.kickerelo.kickerelo.util.comparator.Spieler2vs2EloComparator;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Route("graph2vs2") @Route("graph2vs2")
public class Graph2vs2View extends VerticalLayout { public class Graph2vs2View extends VerticalLayout {
private final Ergebnis2vs2Repository ergebnisRepository;
private final SpielerRepository spielerRepository; private final SpielerRepository spielerRepository;
private Chart chart; private Chart chart;
public Graph2vs2View(Ergebnis2vs2Repository ergebnisRepository, SpielerRepository spielerRepository) { public Graph2vs2View(SpielerRepository spielerRepository) {
this.ergebnisRepository = ergebnisRepository;
this.spielerRepository = spielerRepository; this.spielerRepository = spielerRepository;
setSizeFull(); setSizeFull();
H2 subheading = new H2("2 vs 2 Elo"); H2 subheading = new H2("2 vs 2 Elo");
@@ -43,22 +39,12 @@ public class Graph2vs2View extends VerticalLayout {
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
List<Float> elo = new ArrayList<>(); List<Float> elo = new ArrayList<>();
spielerRepository.getSpielerWith2vs2Games().stream() List<Spieler> spieler = (onlyActive) ?
.filter((spieler) -> { spielerRepository.getSpielerWith2vs2GamesSince(LocalDateTime.now().minusWeeks(4))
if (!onlyActive) { : spielerRepository.getSpielerWith2vs2Games();
return true;
} 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); return new Chart(names, elo);
} }
} }