You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

63 lines
2.1 KiB

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;
}
}