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;
@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<>());
tournamentRepository.save(tournament);
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