Per-route: Randomize/Re-roll button in EncounterModal picks a uniform
random pokemon from eligible (non-duped) encounters. Bulk: new
POST /runs/{run_id}/encounters/bulk-randomize endpoint fills all
remaining routes in order, respecting dupes clause cascading, pinwheel
zones, and route group locking. Frontend Randomize All button on the
run page triggers the bulk endpoint with a confirm dialog.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
from datetime import datetime
|
|
|
|
from app.schemas.base import CamelModel
|
|
from app.schemas.game import RouteResponse
|
|
from app.schemas.pokemon import PokemonResponse
|
|
|
|
|
|
class EncounterCreate(CamelModel):
|
|
route_id: int
|
|
pokemon_id: int
|
|
nickname: str | None = None
|
|
status: str
|
|
catch_level: int | None = None
|
|
is_shiny: bool = False
|
|
|
|
|
|
class EncounterUpdate(CamelModel):
|
|
nickname: str | None = None
|
|
status: str | None = None
|
|
faint_level: int | None = None
|
|
death_cause: str | None = None
|
|
current_pokemon_id: int | None = None
|
|
|
|
|
|
class EncounterResponse(CamelModel):
|
|
id: int
|
|
run_id: int
|
|
route_id: int
|
|
pokemon_id: int
|
|
current_pokemon_id: int | None
|
|
nickname: str | None
|
|
status: str
|
|
catch_level: int | None
|
|
faint_level: int | None
|
|
death_cause: str | None
|
|
is_shiny: bool
|
|
caught_at: datetime
|
|
|
|
|
|
class EncounterDetailResponse(EncounterResponse):
|
|
pokemon: PokemonResponse
|
|
current_pokemon: PokemonResponse | None
|
|
route: RouteResponse
|
|
|
|
|
|
class BulkRandomizeResponse(CamelModel):
|
|
created: list[EncounterResponse]
|
|
skipped_routes: int
|