Skip to content
Snippets Groups Projects
TournamentService.java 5.39 KiB
Newer Older
package hdm.mi.sthbackend.service;

import hdm.mi.sthbackend.dto.PlayerDTO;
import hdm.mi.sthbackend.dto.TeamDTO;
import hdm.mi.sthbackend.exeptions.PlayerIdNotFoundException;
import hdm.mi.sthbackend.exeptions.TeamIdNotFoundException;
import hdm.mi.sthbackend.exeptions.TournamentIdNotFoundException;
import hdm.mi.sthbackend.model.Player;
import hdm.mi.sthbackend.model.Team;
import hdm.mi.sthbackend.model.Tournament;
import hdm.mi.sthbackend.repository.IMatchRepository;
import hdm.mi.sthbackend.repository.IPlayerRepository;
import hdm.mi.sthbackend.repository.ITeamRepository;
import hdm.mi.sthbackend.repository.ITournamentRepository;
import lombok.AllArgsConstructor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Service
@AllArgsConstructor
public class TournamentService {

    private final Logger logger = LogManager.getLogger(TournamentService.class);

    ITournamentRepository tournamentRepository;
    IPlayerRepository playerRepository;
    ITeamRepository teamRepository;
    IMatchRepository matchRepository;

    public Player addPlayerToTeam(UUID teamId,
                                  String playerName) throws TeamIdNotFoundException {
        Team team = teamRepository.findById(teamId)
                .orElseThrow(() -> new TeamIdNotFoundException(teamId));

        Player newPlayer = new Player(UUID.randomUUID(), playerName);
        team.getTeamMembers()
                .add(newPlayer.getPlayerId());

        playerRepository.insert(newPlayer);
        teamRepository.save(team);

    public PlayerDTO findPlayerById(UUID playerId) throws PlayerIdNotFoundException {
        Player player = playerRepository.findById(playerId)
                .orElseThrow(() -> new PlayerIdNotFoundException(playerId));
        return new PlayerDTO(player.getPlayerId(), player.getName());
    }
    public PlayerDTO removePlayerFromTeam(UUID teamId,
                                          UUID playerId) throws PlayerIdNotFoundException, TeamIdNotFoundException {
        Team team = teamRepository.findById(teamId)
                .orElseThrow(() -> new TeamIdNotFoundException(teamId));
        Player playerToDelete = playerRepository.findById(playerId)
                .orElseThrow(() -> new PlayerIdNotFoundException(playerId));
        try {
            team.getTeamMembers()
                    .remove(playerToDelete.getPlayerId());
        } catch (NullPointerException e) {
            throw new PlayerIdNotFoundException(playerId);
        }

        playerRepository.delete(playerToDelete);
        teamRepository.save(team);

        return new PlayerDTO(playerToDelete.getPlayerId(), playerToDelete.getName());
    public UUID updatePlayerName(UUID playerId,
                                 String newPlayerName) throws PlayerIdNotFoundException {
        Player player = playerRepository.findById(playerId)
                .orElseThrow(() -> new PlayerIdNotFoundException(playerId));
        player.setName(newPlayerName);
        playerRepository.save(player);
        return playerId;
    }
    public TeamDTO findTeamById(UUID teamId) throws TeamIdNotFoundException {
        Team team = teamRepository.findById(teamId)
                .orElseThrow(() -> new TeamIdNotFoundException(teamId));
        Map<UUID, PlayerDTO> teamMembers = new HashMap<>();

        team.getTeamMembers().
                forEach(pId -> playerRepository.findById(pId)
                        .ifPresent(p -> teamMembers.put(p.getPlayerId(), new PlayerDTO(p.getPlayerId(), p.getName()))));

        return new TeamDTO(team.getId(), team.getTeamName(), teamMembers);
    public Team createAndAddTeamToTournament(UUID tournamentId, String teamName) throws TournamentIdNotFoundException {
        Tournament tournament = tournamentRepository.findById(tournamentId)
                .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId));

        Team newTeam = new Team(UUID.randomUUID(), teamName, new ArrayList<>());

        tournament.getTeams()
                .add(newTeam.getId());
        teamRepository.insert(newTeam);
        tournamentRepository.save(tournament);
        return newTeam;
    public UUID deleteAndRemoveTeamFromTournament(UUID tournamentId,
                                                  UUID teamId) throws TournamentIdNotFoundException, TeamIdNotFoundException {
        Tournament tournament = tournamentRepository.findById(tournamentId)
                .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId));

        Team teamToDelete = teamRepository.findById(teamId)
                .orElseThrow(() -> new TeamIdNotFoundException(teamId));
        try {
            tournament.getTeams()
                    .remove(teamToDelete.getId());
        } catch (NullPointerException e) {
            throw new TeamIdNotFoundException(tournamentId);
        }
        teamRepository.delete(teamToDelete);
        tournamentRepository.save(tournament);
        return teamId;
    }

    public Tournament createTournament(String tournamentName) {
        Tournament tournament = new Tournament(UUID.randomUUID(), tournamentName, new ArrayList<>(), new ArrayList<>());
        tournamentRepository.insert(tournament);
        return tournament;
    }

    // determineWinner and assignTeamToMatch