diff --git a/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java b/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java index 5b8dbb3..1f686ec 100644 --- a/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java +++ b/src/main/java/org/kickerelo/kickerelo/repository/SpielerRepository.java @@ -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 { Optional 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 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 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 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 getSpielerWith2vs2GamesSince(@Param("dateTime") LocalDateTime dateTime); } diff --git a/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java b/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java index 05efbe7..ccf776a 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java +++ b/src/main/java/org/kickerelo/kickerelo/views/Graph1vs1View.java @@ -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 names = new ArrayList<>(); List elo = new ArrayList<>(); - spielerRepository.getSpielerWith1vs1Games().stream() - .filter((spieler) -> { - if (!onlyActive) { - return true; - } + List 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); } } diff --git a/src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java b/src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java index 45d7b9d..4916bfe 100644 --- a/src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java +++ b/src/main/java/org/kickerelo/kickerelo/views/Graph2vs2View.java @@ -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 names = new ArrayList<>(); List elo = new ArrayList<>(); - spielerRepository.getSpielerWith2vs2Games().stream() - .filter((spieler) -> { - if (!onlyActive) { - return true; - } + List 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); } }