package nl.connectedit.swiss.mapper; import java.util.ArrayList; import lombok.RequiredArgsConstructor; import nl.connectedit.swiss.domain.Status; import nl.connectedit.swiss.domain.entity.Group; import nl.connectedit.swiss.domain.entity.Round; import nl.connectedit.swiss.dto.GroupDto; import nl.connectedit.swiss.dto.RoundDto; import nl.connectedit.swiss.service.StandingsService; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class GroupMapper implements DtoMapper { private final TeamMapper teamMapper; private final RoundMapper roundMapper; private final StandingsService standingsService; private final StandingsMapper standingsMapper; @Override public GroupDto toDto(Group group) { var groupDto = new GroupDto(); groupDto.setId(group.getId()); groupDto.setName(group.getName()); groupDto.setType(group.getType().name()); groupDto.setStatus(group.getStatus().name()); groupDto.setTeams( group.getTeams() .stream() .map(teamMapper::toDto) .toList()); var standingsGroup = new ArrayList(); var rounds = new ArrayList(); if (group.getRounds() != null) { for (var round : group.getRounds()) { if (round.getStatus() == Status.FINISHED) { standingsGroup.add(round); } rounds.add(roundMapper.toDto(round, standingsGroup, group.getTeams())); } } groupDto.setRounds(rounds); var standings = standingsService.getStandings(group.getRounds(), group.getTeams()); groupDto.setStandings(standingsMapper.toDto(standings)); return groupDto; } }