Merge pull request 'fix: refresh roster data before validation to prevent stale cache' (#60) from hotfix/stale-roster-cache into next-release
Reviewed-on: #60
This commit is contained in:
commit
bc8a256b14
@ -14,7 +14,7 @@ from models.transaction import Transaction
|
||||
from models.team import Team
|
||||
from models.player import Player
|
||||
from models.roster import TeamRoster
|
||||
from services.roster_service import roster_service
|
||||
from services.roster_service import RosterService, roster_service
|
||||
from services.transaction_service import transaction_service
|
||||
from services.league_service import league_service
|
||||
from models.team import RosterType
|
||||
@ -174,7 +174,13 @@ class RosterValidationResult:
|
||||
class TransactionBuilder:
|
||||
"""Interactive transaction builder for complex multi-move transactions."""
|
||||
|
||||
def __init__(self, team: Team, user_id: int, season: int = get_config().sba_season):
|
||||
def __init__(
|
||||
self,
|
||||
team: Team,
|
||||
user_id: int,
|
||||
season: int = get_config().sba_season,
|
||||
roster_svc: Optional[RosterService] = None,
|
||||
):
|
||||
"""
|
||||
Initialize transaction builder.
|
||||
|
||||
@ -182,12 +188,14 @@ class TransactionBuilder:
|
||||
team: Team making the transaction
|
||||
user_id: Discord user ID of the GM
|
||||
season: Season number
|
||||
roster_svc: RosterService instance (defaults to global roster_service)
|
||||
"""
|
||||
self.team = team
|
||||
self.user_id = user_id
|
||||
self.season = season
|
||||
self.moves: List[TransactionMove] = []
|
||||
self.created_at = datetime.now(timezone.utc)
|
||||
self._roster_svc = roster_svc or roster_service
|
||||
|
||||
# Cache for roster data
|
||||
self._current_roster: Optional[TeamRoster] = None
|
||||
@ -201,13 +209,19 @@ class TransactionBuilder:
|
||||
f"TransactionBuilder initialized for {team.abbrev} by user {user_id}"
|
||||
)
|
||||
|
||||
async def load_roster_data(self) -> None:
|
||||
"""Load current roster data for the team."""
|
||||
if self._roster_loaded:
|
||||
async def load_roster_data(self, force_refresh: bool = False) -> None:
|
||||
"""Load current roster data for the team.
|
||||
|
||||
Args:
|
||||
force_refresh: If True, bypass cache and fetch fresh data from API.
|
||||
"""
|
||||
if self._roster_loaded and not force_refresh:
|
||||
return
|
||||
|
||||
try:
|
||||
self._current_roster = await roster_service.get_current_roster(self.team.id)
|
||||
self._current_roster = await self._roster_svc.get_current_roster(
|
||||
self.team.id
|
||||
)
|
||||
self._roster_loaded = True
|
||||
logger.debug(f"Loaded roster data for team {self.team.abbrev}")
|
||||
except Exception as e:
|
||||
@ -678,8 +692,17 @@ class TransactionBuilder:
|
||||
logger.info(
|
||||
f"Created {len(transactions)} transactions for submission with move_id {move_id}"
|
||||
)
|
||||
|
||||
# Invalidate roster cache so subsequent operations fetch fresh data
|
||||
self.invalidate_roster_cache()
|
||||
|
||||
return transactions
|
||||
|
||||
def invalidate_roster_cache(self) -> None:
|
||||
"""Invalidate cached roster data so next load fetches fresh data."""
|
||||
self._roster_loaded = False
|
||||
self._current_roster = None
|
||||
|
||||
def clear_moves(self) -> None:
|
||||
"""Clear all moves from the transaction builder."""
|
||||
self.moves.clear()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user