Files
nuzlocke-tracker/backend/src/app/schemas/boss.py
Julian Tabel a6bf8b4af2 Add conditional boss battle teams (variant teams by condition)
Wire up the existing condition_label column on boss_pokemon to support
variant teams throughout the UI. Boss battles can now have multiple team
configurations based on conditions (e.g., starter choice in Gen 1).

- Add condition_label to BossPokemonInput schema (frontend + backend bulk import)
- Rewrite BossTeamEditor with variant tabs (Default + named conditions)
- Add variant pill selector to BossDefeatModal team preview
- Add BossTeamPreview component to RunEncounters boss cards
- Fix MissingGreenlet error in set_boss_team via session.expunge_all()
- Fix PokemonSelector state bleed between tabs via composite React key
- Add Alembic migration for condition_label column

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:20:30 +01:00

98 lines
2.0 KiB
Python

from datetime import datetime
from app.schemas.base import CamelModel
from app.schemas.pokemon import PokemonResponse
class BossPokemonResponse(CamelModel):
id: int
pokemon_id: int
level: int
order: int
condition_label: str | None
pokemon: PokemonResponse
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
pokemon: list[BossPokemonResponse] = []
class BossResultResponse(CamelModel):
id: int
run_id: int
boss_battle_id: int
result: str
attempts: int
completed_at: datetime | None
# --- 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
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
class BossPokemonInput(CamelModel):
pokemon_id: int
level: int
order: int
condition_label: str | None = None
class BossResultCreate(CamelModel):
boss_battle_id: int
result: str
attempts: int = 1
class BossReorderItem(CamelModel):
id: int
order: int
class BossReorderRequest(CamelModel):
bosses: list[BossReorderItem]
class BossResultUpdate(CamelModel):
result: str | None = None
attempts: int | None = None