mirror of
https://github.com/AJMicke/KickerELO.git
synced 2026-03-11 13:31:02 +01:00
views: Add checkbox to only show active players
Enabled by default, this changes the Elo graphs to only show players that played a game (in the respective category) in the last 2 weeks.
This commit is contained in:
committed by
AJMicke
parent
f63e0a7507
commit
1670901a57
@@ -1,6 +1,7 @@
|
||||
package org.kickerelo.kickerelo.repository;
|
||||
|
||||
import org.kickerelo.kickerelo.data.Ergebnis1vs1;
|
||||
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;
|
||||
@@ -18,4 +19,7 @@ public interface Ergebnis1vs1Repository extends JpaRepository<Ergebnis1vs1, Long
|
||||
(:S1 IS NULL AND :S2 IS NULL)
|
||||
""")
|
||||
List<Ergebnis1vs1> getFiltered(@Param("S1") String s1, @Param("S2") String s2);
|
||||
|
||||
@Query("select e from Ergebnis1vs1 e where (:s = e.verlierer or :s = e.gewinner) order by e.timestamp desc")
|
||||
List<Ergebnis1vs1> getResultsForSpieler(@Param("s") Spieler s);
|
||||
}
|
||||
|
||||
@@ -1,29 +1,64 @@
|
||||
package org.kickerelo.kickerelo.views;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
||||
import org.kickerelo.kickerelo.util.comparator.Spieler1vs1EloComparator;
|
||||
|
||||
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.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(SpielerRepository repo) {
|
||||
public Graph1vs1View(Ergebnis1vs1Repository ergebnisRepository, SpielerRepository spielerRepository) {
|
||||
this.ergebnisRepository = ergebnisRepository;
|
||||
this.spielerRepository = spielerRepository;
|
||||
setSizeFull();
|
||||
H2 subheading = new H2("1 vs 1 Elo");
|
||||
|
||||
Checkbox checkbox = new Checkbox();
|
||||
checkbox.setValue(true);
|
||||
checkbox.addValueChangeListener(event -> {
|
||||
remove(chart);
|
||||
chart = createChart(event.getValue());
|
||||
add(chart);
|
||||
});
|
||||
checkbox.setLabel("Nur aktive Spieler*innen anzeigen");
|
||||
checkbox.setTooltipText("Nur Spieler*innen anzeigen, die in den letzten 2 Wochen gespielt haben");
|
||||
chart = createChart(true);
|
||||
|
||||
add(subheading, checkbox, chart);
|
||||
}
|
||||
|
||||
private Chart createChart(boolean onlyActive) {
|
||||
List<String> names = new ArrayList<>();
|
||||
List<Float> elo = new ArrayList<>();
|
||||
|
||||
repo.getSpielerWith1vs1Games().stream().sorted(new Spieler1vs1EloComparator()).forEach((s) -> {names.add(s.getName()); elo.add(s.getElo1vs1());});
|
||||
spielerRepository.getSpielerWith1vs1Games().stream()
|
||||
.filter((spieler) -> {
|
||||
if (!onlyActive) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Chart chart = new Chart(names, elo);
|
||||
|
||||
add(subheading, chart);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +1,64 @@
|
||||
package org.kickerelo.kickerelo.views;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
||||
import org.kickerelo.kickerelo.util.comparator.Spieler2vs2EloComparator;
|
||||
|
||||
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.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(SpielerRepository repo) {
|
||||
public Graph2vs2View(Ergebnis2vs2Repository ergebnisRepository, SpielerRepository spielerRepository) {
|
||||
this.ergebnisRepository = ergebnisRepository;
|
||||
this.spielerRepository = spielerRepository;
|
||||
setSizeFull();
|
||||
H2 subheading = new H2("2 vs 2 Elo");
|
||||
|
||||
Checkbox checkbox = new Checkbox();
|
||||
checkbox.setValue(true);
|
||||
checkbox.addValueChangeListener(event -> {
|
||||
remove(chart);
|
||||
chart = createChart(event.getValue());
|
||||
add(chart);
|
||||
});
|
||||
checkbox.setLabel("Nur aktive Spieler*innen anzeigen");
|
||||
checkbox.setTooltipText("Nur Spieler*innen anzeigen, die in den letzten 2 Wochen gespielt haben");
|
||||
chart = createChart(true);
|
||||
|
||||
add(subheading, checkbox, chart);
|
||||
}
|
||||
|
||||
private Chart createChart(boolean onlyActive) {
|
||||
List<String> names = new ArrayList<>();
|
||||
List<Float> elo = new ArrayList<>();
|
||||
|
||||
repo.getSpielerWith2vs2Games().stream().sorted(new Spieler2vs2EloComparator()).forEach((s) -> {names.add(s.getName()); elo.add(s.getElo2vs2());});
|
||||
spielerRepository.getSpielerWith2vs2Games().stream()
|
||||
.filter((spieler) -> {
|
||||
if (!onlyActive) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Chart chart = new Chart(names, elo);
|
||||
|
||||
add(subheading, chart);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user