package hdm.mi.sthbackend.service; import com.mongodb.client.MongoClient; 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.ITournamentRepository; import hdm.mi.sthbackend.repository.MongoManager; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.Optional; import java.util.UUID; @Service @AllArgsConstructor public class TournamentService { ITournamentRepository tournamentRepository; public Player addPlayerToTeam(UUID tournamentId, UUID teamId, String playerName) throws TournamentIdNotFoundException { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); Player newPlayer = new Player(UUID.randomUUID(), playerName); tournament .getTeams() .get(teamId) .getTeamMembers() .put(newPlayer.getPlayerId(), newPlayer); tournamentRepository.save(tournament); return newPlayer; } public Player removePlayerFromTeam(UUID tournamentId, UUID teamId, UUID playerId) throws TournamentIdNotFoundException { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); Player removedPlayer = tournament.getTeams() .get(teamId) .getTeamMembers() .remove(playerId); tournamentRepository.save(tournament); return removedPlayer; } public UUID updatePlayerName(UUID tournamentId, UUID teamId, UUID playerId, String newPlayerName) throws TournamentIdNotFoundException, PlayerIdNotFoundException { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); tournament.getTeams() .get(teamId) .getTeamMembers() .get(playerId) .setName(newPlayerName); tournamentRepository.save(tournament); return playerId; } public Team createTeam(UUID tournamentId, String teamName) throws TournamentIdNotFoundException { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); Team team = new Team(UUID.randomUUID(), teamName, new HashMap<>() { }); tournament.getTeams() .put(team.getId(), team); tournamentRepository.save(tournament); return team; } public UUID removeTeamFromTournament(UUID tournamentId, UUID teamId) throws TournamentIdNotFoundException, TeamIdNotFoundException { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); Optional.ofNullable(tournament.getTeams() .remove(teamId)) .orElseThrow(() -> new TeamIdNotFoundException(tournamentId)); tournamentRepository.save(tournament); return teamId; } public Tournament createTournament(String tournamentName) { MongoManager manager = new MongoManager(); MongoClient client = manager.getMongoClient(); manager.getTestCollection(client); Tournament tournament = new Tournament(UUID.randomUUID(), tournamentName, new ArrayList<>(), new HashMap<>()); tournamentRepository.insert(tournament); return tournament; } }