Files
nuzlocke-tracker/backend/src/app/schemas/boss.py
Julian Tabel 0a519e356e
Some checks failed
CI / backend-tests (push) Failing after 1m16s
CI / frontend-tests (push) Successful in 57s
feat: add auth system, boss pokemon details, moves/abilities API, and run ownership
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>
2026-03-20 21:41:38 +01:00

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