Add user authentication with login/signup/protected routes, boss pokemon detail fields and result team tracking, moves and abilities selector components and API, run ownership and visibility controls, and various UI improvements across encounters, run list, and journal pages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
145 lines
3.1 KiB
Python
145 lines
3.1 KiB
Python
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|