11from src .repositories .game_repository import GameRepository
22from src .models .game import Game
33from src .services .team_service import TeamService
4+ from src .utils .helpers import is_tournament_placeholder_team
45
56
67class GameService :
@@ -33,6 +34,7 @@ def create_game(data):
3334 opponent_id = data .get ("opponent_id" )
3435 if not TeamService .get_team_by_id (opponent_id ):
3536 raise ValueError (f"Opponent team with id { opponent_id } does not exist." )
37+
3638 game = Game (** data )
3739 GameRepository .insert (game )
3840 return game
@@ -69,6 +71,16 @@ def get_game_by_key_fields(city, date, gender, location, opponent_id, sport, sta
6971 city , date , gender , location , opponent_id , sport , state
7072 )
7173
74+ @staticmethod
75+ def get_game_by_tournament_key_fields (city , date , gender , location , sport , state ):
76+ """
77+ Retrieve a tournament game by location and date (excluding opponent_id).
78+ This is used when we need to find a tournament game that might have a placeholder team.
79+ """
80+ return GameRepository .find_by_tournament_key_fields (
81+ city , date , gender , location , sport , state
82+ )
83+
7284 @staticmethod
7385 def get_games_by_sport (sport ):
7486 """
@@ -89,3 +101,50 @@ def get_games_by_sport_gender(sport, gender):
89101 Retrieves all game by its sport and gender.
90102 """
91103 return GameRepository .find_by_sport_gender (sport , gender )
104+
105+ @staticmethod
106+ def get_tournament_games_by_sport_gender (sport , gender , after_date = None ):
107+ """
108+ Find tournament games (with placeholder team names) for a specific sport and gender.
109+ Optionally filter by games after a specific date.
110+ """
111+ games = GameRepository .find_games_by_sport_gender_after_date (sport , gender , after_date )
112+ tournament_games = []
113+
114+ for game in games :
115+ team = TeamService .get_team_by_id (game .opponent_id )
116+ if team and is_tournament_placeholder_team (team .name ):
117+ tournament_games .append (game )
118+
119+ return tournament_games
120+
121+ @staticmethod
122+ def delete_tournament_games_by_sport_gender (sport , gender , after_date = None ):
123+ """
124+ Delete tournament games (with placeholder team names) for a specific sport and gender.
125+ Optionally filter by games after a specific date.
126+ """
127+ games = GameRepository .find_games_by_sport_gender_after_date (sport , gender , after_date )
128+ tournament_game_ids = []
129+
130+ for game in games :
131+ team = TeamService .get_team_by_id (game .opponent_id )
132+ if team and is_tournament_placeholder_team (team .name ):
133+ tournament_game_ids .append (game .id )
134+
135+ if tournament_game_ids :
136+ return GameRepository .delete_games_by_ids (tournament_game_ids )
137+ return 0
138+
139+ @staticmethod
140+ def handle_tournament_loss (sport , gender , loss_date ):
141+ """
142+ Handle when a Cornell team loses in a tournament by deleting future tournament games.
143+
144+ Args:
145+ sport (str): The sport of the team that lost
146+ gender (str): The gender of the team that lost
147+ loss_date (datetime): The date when the team lost
148+ """
149+ deleted_count = GameService .delete_tournament_games_by_sport_gender (sport , gender , loss_date )
150+ return deleted_count
0 commit comments