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<Season, Integer> implements NavigableService<Season> {
|
|
|
|
private final SeasonRepository repository;
|
|
|
|
public SeasonService(@Autowired SeasonRepository repository) {
|
|
this.repository = repository;
|
|
}
|
|
|
|
@Override
|
|
protected SeasonRepository getRepository() {
|
|
return repository;
|
|
}
|
|
|
|
public List<Season> getAllSeasonsSorted() {
|
|
return repository.findAll().stream()
|
|
.sorted(Comparator.comparingInt(Season::getYearEnd))
|
|
.sorted(Comparator.comparingInt(Season::getYearStart))
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
public Optional<Season> getLatestSeason() {
|
|
List<Season> allSeasonsSorted = getAllSeasonsSorted();
|
|
if (allSeasonsSorted.isEmpty()) {
|
|
return Optional.empty();
|
|
}
|
|
return Optional.of(allSeasonsSorted.get(allSeasonsSorted.size() - 1));
|
|
}
|
|
|
|
public Optional<Season> getSeason(String name) {
|
|
return repository.findAll().stream()
|
|
.filter(season -> season.toString().equals(name))
|
|
.findFirst();
|
|
}
|
|
|
|
public List<Season> 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<Season> getNavigableClass() {
|
|
return Season.class;
|
|
}
|
|
}
|