CLAUDE: Fix injury roll validation to support playoff weeks

Fixed bug where injury rolls during playoff weeks (19-21) were being rejected
with "weeks 1-18 only" error message.

Changes:
- Updated BatterInjuryModal and PitcherRestModal week validation
- Now uses config.weeks_per_season + config.playoff_weeks_per_season for max week
- Added dynamic game validation based on playoff round:
  * Regular season (weeks 1-18): 4 games per week
  * Playoff round 1 (week 19): 5 games
  * Playoff round 2 (week 20): 7 games
  * Playoff round 3 (week 21): 7 games
- Replaced hardcoded values with config-based calculations

Config values used:
- weeks_per_season (18)
- playoff_weeks_per_season (3)
- games_per_week (4)
- playoff_round_one_games (5)
- playoff_round_two_games (7)
- playoff_round_three_games (7)

Now injuries can be properly logged during all phases of the season including
playoffs with correct game validation for each round.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2025-10-29 00:56:39 -05:00
parent 87fb4491a9
commit 2bfc87ac1b

View File

@ -539,48 +539,64 @@ class BatterInjuryModal(BaseModal):
"""Handle batter injury input and log injury."""
from services.player_service import player_service
from services.injury_service import injury_service
from config import get_config
import math
config = get_config()
max_week = config.weeks_per_season + config.playoff_weeks_per_season
# Validate current week
try:
week = int(self.current_week.value)
if week < 1 or week > 18:
raise ValueError("Week must be between 1 and 18")
if week < 1 or week > max_week:
raise ValueError(f"Week must be between 1 and {max_week}")
except ValueError:
embed = EmbedTemplate.error(
title="Invalid Week",
description="Current week must be a number between 1 and 18."
description=f"Current week must be a number between 1 and {max_week} (including playoffs)."
)
await interaction.response.send_message(embed=embed, ephemeral=True)
return
# Determine max games based on week (regular season vs playoff rounds)
if week <= config.weeks_per_season:
max_game = config.games_per_week
elif week == config.weeks_per_season + 1:
max_game = config.playoff_round_one_games
elif week == config.weeks_per_season + 2:
max_game = config.playoff_round_two_games
elif week == config.weeks_per_season + 3:
max_game = config.playoff_round_three_games
else:
max_game = config.games_per_week # Fallback
# Validate current game
try:
game = int(self.current_game.value)
if game < 1 or game > 4:
raise ValueError("Game must be between 1 and 4")
if game < 1 or game > max_game:
raise ValueError(f"Game must be between 1 and {max_game}")
except ValueError:
embed = EmbedTemplate.error(
title="Invalid Game",
description="Current game must be a number between 1 and 4."
description=f"Current game must be a number between 1 and {max_game}."
)
await interaction.response.send_message(embed=embed, ephemeral=True)
return
# Calculate injury dates
out_weeks = math.floor(self.injury_games / 4)
out_games = self.injury_games % 4
out_weeks = math.floor(self.injury_games / config.games_per_week)
out_games = self.injury_games % config.games_per_week
return_week = week + out_weeks
return_game = game + 1 + out_games
if return_game > 4:
if return_game > config.games_per_week:
return_week += 1
return_game -= 4
return_game -= config.games_per_week
# Adjust start date if injury starts after game 4
start_week = week if game != 4 else week + 1
start_game = game + 1 if game != 4 else 1
start_week = week if game != config.games_per_week else week + 1
start_game = game + 1 if game != config.games_per_week else 1
return_date = f'w{return_week:02d}g{return_game}'
@ -707,30 +723,46 @@ class PitcherRestModal(BaseModal):
from services.player_service import player_service
from services.injury_service import injury_service
from models.injury import Injury
from config import get_config
import math
config = get_config()
max_week = config.weeks_per_season + config.playoff_weeks_per_season
# Validate current week
try:
week = int(self.current_week.value)
if week < 1 or week > 18:
raise ValueError("Week must be between 1 and 18")
if week < 1 or week > max_week:
raise ValueError(f"Week must be between 1 and {max_week}")
except ValueError:
embed = EmbedTemplate.error(
title="Invalid Week",
description="Current week must be a number between 1 and 18."
description=f"Current week must be a number between 1 and {max_week} (including playoffs)."
)
await interaction.response.send_message(embed=embed, ephemeral=True)
return
# Determine max games based on week (regular season vs playoff rounds)
if week <= config.weeks_per_season:
max_game = config.games_per_week
elif week == config.weeks_per_season + 1:
max_game = config.playoff_round_one_games
elif week == config.weeks_per_season + 2:
max_game = config.playoff_round_two_games
elif week == config.weeks_per_season + 3:
max_game = config.playoff_round_three_games
else:
max_game = config.games_per_week # Fallback
# Validate current game
try:
game = int(self.current_game.value)
if game < 1 or game > 4:
raise ValueError("Game must be between 1 and 4")
if game < 1 or game > max_game:
raise ValueError(f"Game must be between 1 and {max_game}")
except ValueError:
embed = EmbedTemplate.error(
title="Invalid Game",
description="Current game must be a number between 1 and 4."
description=f"Current game must be a number between 1 and {max_game}."
)
await interaction.response.send_message(embed=embed, ephemeral=True)
return