enable teams to register for tournaments (#53)
Co-authored-by: David Rodenkirchen <davidr.develop@gmail.com> Reviewed-on: #53
This commit was merged in pull request #53.
This commit is contained in:
@@ -3,6 +3,7 @@ from typing import Optional
|
||||
from src.ezgg_lan_manager.services.DatabaseService import DatabaseService
|
||||
from src.ezgg_lan_manager.services.UserService import UserService
|
||||
from src.ezgg_lan_manager.types.Participant import Participant
|
||||
from src.ezgg_lan_manager.types.Team import Team
|
||||
from src.ezgg_lan_manager.types.Tournament import Tournament
|
||||
from src.ezgg_lan_manager.types.TournamentBase import ParticipantType, TournamentError
|
||||
from src.ezgg_lan_manager.types.User import User
|
||||
@@ -27,11 +28,24 @@ class TournamentService:
|
||||
tournament = await self.get_tournament_by_id(tournament_id)
|
||||
if not tournament:
|
||||
raise TournamentError(f"No tournament with ID {tournament_id} was found")
|
||||
if tournament.participant_type != ParticipantType.PLAYER:
|
||||
raise TournamentError(f"Can only add single player to team tournament, not {tournament.participant_type.name}")
|
||||
participant = Participant(id_=user_id, participant_type=ParticipantType.PLAYER)
|
||||
tournament.add_participant(participant)
|
||||
await self._db_service.add_participant_to_tournament(participant, tournament)
|
||||
self._cache_dirty = True
|
||||
|
||||
async def register_team_for_tournament(self, team_id: int, tournament_id: int) -> None:
|
||||
tournament = await self.get_tournament_by_id(tournament_id)
|
||||
if not tournament:
|
||||
raise TournamentError(f"No tournament with ID {tournament_id} was found")
|
||||
if tournament.participant_type != ParticipantType.TEAM:
|
||||
raise TournamentError(f"Can only add team to team tournament, not {tournament.participant_type.name}")
|
||||
participant = Participant(id_=team_id, participant_type=ParticipantType.TEAM)
|
||||
tournament.add_participant(participant)
|
||||
await self._db_service.add_participant_to_tournament(participant, tournament)
|
||||
self._cache_dirty = True
|
||||
|
||||
async def unregister_user_from_tournament(self, user_id: int, tournament_id: int) -> None:
|
||||
tournament = await self.get_tournament_by_id(tournament_id)
|
||||
if not tournament:
|
||||
@@ -42,6 +56,16 @@ class TournamentService:
|
||||
await self._db_service.remove_participant_from_tournament(participant, tournament)
|
||||
self._cache_dirty = True
|
||||
|
||||
async def unregister_team_from_tournament(self, team_id: int, tournament_id: int) -> None:
|
||||
tournament = await self.get_tournament_by_id(tournament_id)
|
||||
if not tournament:
|
||||
raise TournamentError(f"No tournament with ID {tournament_id} was found")
|
||||
participant = next(filter(lambda p: p.id == team_id, tournament.participants), None)
|
||||
if participant is not None:
|
||||
tournament.remove_participant(participant)
|
||||
await self._db_service.remove_participant_from_tournament(participant, tournament)
|
||||
self._cache_dirty = True
|
||||
|
||||
async def get_tournaments(self) -> list[Tournament]:
|
||||
if self._cache_dirty:
|
||||
await self._update_cache()
|
||||
@@ -57,6 +81,11 @@ class TournamentService:
|
||||
participant_ids = [p.id for p in participants]
|
||||
return list(filter(lambda u: u.user_id in participant_ids, all_users))
|
||||
|
||||
async def get_teams_from_participant_list(self, participants: list[Participant]) -> list[Team]:
|
||||
all_teams = await self._db_service.get_teams()
|
||||
participant_ids = [p.id for p in participants]
|
||||
return list(filter(lambda t: t.id in participant_ids, all_teams))
|
||||
|
||||
async def start_tournament(self, tournament_id: int):
|
||||
tournament = await self.get_tournament_by_id(tournament_id)
|
||||
if tournament:
|
||||
|
||||
Reference in New Issue
Block a user