package app.data.service; import app.data.entity.Player; import app.data.entity.Season; import app.data.repository.SeasonRepository; import app.navigation.NavigableService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.vaadin.artur.helpers.CrudService; import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @Service public class SeasonService extends CrudService implements NavigableService { private final SeasonRepository repository; public SeasonService(@Autowired SeasonRepository repository) { this.repository = repository; } @Override protected SeasonRepository getRepository() { return repository; } public List getAllSeasonsSorted() { return repository.findAll().stream() .sorted(Comparator.comparingInt(Season::getYearEnd)) .sorted(Comparator.comparingInt(Season::getYearStart)) .collect(Collectors.toList()); } public Optional getLatestSeason() { List allSeasonsSorted = getAllSeasonsSorted(); if (allSeasonsSorted.isEmpty()) { return Optional.empty(); } return Optional.of(allSeasonsSorted.get(allSeasonsSorted.size() - 1)); } public Optional getSeason(String name) { return repository.findAll().stream() .filter(season -> season.toString().equals(name)) .findFirst(); } public List getAllSeasonsForPlayerSorted(Player player) { return repository.findAll().stream() .filter(season -> season.getMatchdays().stream() .anyMatch(matchday -> matchday.getMatches().stream() .anyMatch(match -> match.getPlayer1().equals(player) || match.getPlayer2().equals(player)))) .collect(Collectors.toList()); } @Override public Class getNavigableClass() { return Season.class; } }