package hdm.mi.sthbackend.service; import com.mongodb.client.MongoClient; import hdm.mi.sthbackend.exeptions.PlayerIdNotFoundException; 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.List; 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() .add(newPlayer); tournamentRepository.save(tournament); return newPlayer; } public Player removePlayerFromTeam(UUID tournamentId, UUID teamId, UUID playerId) throws TournamentIdNotFoundException, PlayerIdNotFoundException { Tournament tournament = tournamentRepository.findById(tournamentId) .orElseThrow(() -> new TournamentIdNotFoundException(tournamentId)); List<Player> teamMembers = tournament.getTeams() .get(teamId) .getTeamMembers(); Player playerToRemove = teamMembers.stream() .filter(player -> player.getPlayerId() .equals(playerId)) .findFirst() .orElseThrow(() -> new PlayerIdNotFoundException(playerId)); tournament.getTeams() .get(teamId) .getTeamMembers() .remove(playerToRemove); tournamentRepository.save(tournament); return playerToRemove; } 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() .stream() .filter(player -> player.getPlayerId() .equals(playerId)) .findFirst() .orElseThrow(() -> new PlayerIdNotFoundException(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 ArrayList<>() { }); tournament.getTeams() .put(team.getId(), team); tournamentRepository.save(tournament); return team; } 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; } }