from datetime import datetime from app.schemas.base import CamelModel from app.schemas.pokemon import PokemonResponse class MoveRef(CamelModel): id: int name: str class AbilityRef(CamelModel): id: int name: str class BossPokemonResponse(CamelModel): id: int pokemon_id: int level: int order: int condition_label: str | None pokemon: PokemonResponse # Detail fields ability_id: int | None = None ability: AbilityRef | None = None held_item: str | None = None nature: str | None = None move1_id: int | None = None move2_id: int | None = None move3_id: int | None = None move4_id: int | None = None move1: MoveRef | None = None move2: MoveRef | None = None move3: MoveRef | None = None move4: MoveRef | None = None class BossBattleResponse(CamelModel): id: int version_group_id: int name: str boss_type: str specialty_type: str | None badge_name: str | None badge_image_url: str | None level_cap: int order: int after_route_id: int | None location: str section: str | None sprite_url: str | None game_id: int | None pokemon: list[BossPokemonResponse] = [] class BossResultTeamMemberResponse(CamelModel): id: int encounter_id: int level: int | None class BossResultResponse(CamelModel): id: int run_id: int boss_battle_id: int result: str attempts: int completed_at: datetime | None team: list[BossResultTeamMemberResponse] = [] # --- Input schemas --- class BossBattleCreate(CamelModel): name: str boss_type: str specialty_type: str | None = None badge_name: str | None = None badge_image_url: str | None = None level_cap: int order: int after_route_id: int | None = None location: str section: str | None = None sprite_url: str | None = None game_id: int | None = None class BossBattleUpdate(CamelModel): name: str | None = None boss_type: str | None = None specialty_type: str | None = None badge_name: str | None = None badge_image_url: str | None = None level_cap: int | None = None order: int | None = None after_route_id: int | None = None location: str | None = None section: str | None = None sprite_url: str | None = None game_id: int | None = None class BossPokemonInput(CamelModel): pokemon_id: int level: int order: int condition_label: str | None = None # Detail fields ability_id: int | None = None held_item: str | None = None nature: str | None = None move1_id: int | None = None move2_id: int | None = None move3_id: int | None = None move4_id: int | None = None class BossResultTeamMemberInput(CamelModel): encounter_id: int level: int | None = None class BossResultCreate(CamelModel): boss_battle_id: int result: str attempts: int = 1 team: list[BossResultTeamMemberInput] = [] class BossReorderItem(CamelModel): id: int order: int class BossReorderRequest(CamelModel): bosses: list[BossReorderItem] class BossResultUpdate(CamelModel): result: str | None = None attempts: int | None = None