From a0051aacc3c1efcc3abb3059ad2117d54af726ad Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Sat, 2 Mar 2024 20:31:14 +0100 Subject: [PATCH] Implement domain version of season_guess_result --- formula10/domain/domain_model.py | 22 ++++++++++++++++++- formula10/domain/model/season_guess_result.py | 17 ++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 formula10/domain/model/season_guess_result.py diff --git a/formula10/domain/domain_model.py b/formula10/domain/domain_model.py index 41b92ad..b8f0888 100644 --- a/formula10/domain/domain_model.py +++ b/formula10/domain/domain_model.py @@ -6,6 +6,7 @@ from formula10.database.model.db_race import DbRace from formula10.database.model.db_race_guess import DbRaceGuess from formula10.database.model.db_race_result import DbRaceResult from formula10.database.model.db_season_guess import DbSeasonGuess +from formula10.database.model.db_season_guess_result import DbSeasonGuessResult from formula10.database.model.db_team import DbTeam from formula10.database.model.db_user import DbUser from formula10.database.validation import find_multiple_strict, find_single_or_none_strict, find_single_strict @@ -14,6 +15,7 @@ from formula10.domain.model.race import Race from formula10.domain.model.race_guess import RaceGuess from formula10.domain.model.race_result import RaceResult from formula10.domain.model.season_guess import SeasonGuess +from formula10.domain.model.season_guess_result import SeasonGuessResult from formula10.domain.model.team import NONE_TEAM, Team from formula10.domain.model.user import User from formula10 import db @@ -24,6 +26,7 @@ class Model(): _all_race_results: List[RaceResult] | None = None _all_race_guesses: List[RaceGuess] | None = None _all_season_guesses: List[SeasonGuess] | None = None + _all_season_guess_results: List[SeasonGuessResult] | None = None _all_races: List[Race] | None = None _all_drivers: List[Driver] | None = None _all_teams: List[Team] | None = None @@ -76,6 +79,15 @@ class Model(): return self._all_season_guesses + def all_season_guess_results(self) -> List[SeasonGuessResult]: + if self._all_season_guess_results is None: + self._all_season_guess_results = [ + SeasonGuessResult.from_db_season_guess_result(db_season_guess_result) + for db_season_guess_result in db.session.query(DbSeasonGuessResult).join(DbSeasonGuessResult.user).filter_by(enabled=True).all() # Ignore disabled users + ] + + return self._all_season_guess_results + def all_races(self) -> List[Race]: """ Returns a list of all races, in descending order (last race first). @@ -227,7 +239,7 @@ class Model(): # @overload - def season_guesses_by(self, *, user_name: str) -> SeasonGuess: + def season_guesses_by(self, *, user_name: str) -> SeasonGuess | None: """ Returns the season guess made by a specific user. """ @@ -256,6 +268,14 @@ class Model(): raise Exception("season_guesses_by encountered illegal combination of arguments") + # + # Season guess result queries + # + + def season_guess_result_by(self, *, user_name: str) -> SeasonGuessResult | None: + predicate: Callable[[SeasonGuessResult], bool] = lambda guess: guess.user.name == user_name + return find_single_or_none_strict(predicate, self.all_season_guess_results()) + # # Team queries # diff --git a/formula10/domain/model/season_guess_result.py b/formula10/domain/model/season_guess_result.py new file mode 100644 index 0000000..4794918 --- /dev/null +++ b/formula10/domain/model/season_guess_result.py @@ -0,0 +1,17 @@ +from formula10.database.model.db_season_guess_result import DbSeasonGuessResult +from formula10.domain.model.user import User + + +class SeasonGuessResult(): + @classmethod + def from_db_season_guess_result(cls, db_season_guess_result: DbSeasonGuessResult): + season_guess_result: SeasonGuessResult = cls() + season_guess_result.user = User.from_db_user(db_season_guess_result.user) + season_guess_result.hot_take_correct = db_season_guess_result.hot_take_correct + season_guess_result.overtakes_correct = db_season_guess_result.overtakes_correct + + return season_guess_result + + user: User + hot_take_correct: bool + overtakes_correct: bool \ No newline at end of file