Implement domain version of season_guess_result

This commit is contained in:
2024-03-02 20:31:14 +01:00
parent d3ee08df36
commit a0051aacc3
2 changed files with 38 additions and 1 deletions

View File

@ -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
#

View File

@ -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