Files
nuzlocke-tracker/backend/src/app/schemas/pokemon.py
Julian Tabel ebdc9b2f28
All checks were successful
CI / backend-lint (push) Successful in 8s
CI / frontend-lint (push) Successful in 32s
feature/boss-sprites-and-badges (#22)
Reviewed-on: TheFurya/nuzlocke-tracker#22
Co-authored-by: Julian Tabel <juliantabel.jt@gmail.com>
Co-committed-by: Julian Tabel <juliantabel.jt@gmail.com>
2026-02-14 11:04:08 +01:00

220 lines
4.5 KiB
Python

from pydantic import BaseModel
from app.schemas.base import CamelModel
class PokemonResponse(CamelModel):
id: int
pokeapi_id: int
national_dex: int
name: str
types: list[str]
sprite_url: str | None
class PaginatedPokemonResponse(CamelModel):
items: list[PokemonResponse]
total: int
limit: int
offset: int
class EvolutionResponse(CamelModel):
id: int
from_pokemon_id: int
to_pokemon: PokemonResponse
trigger: str
min_level: int | None
item: str | None
held_item: str | None
condition: str | None
region: str | None
class FamiliesResponse(CamelModel):
families: list[list[int]]
class RouteEncounterResponse(CamelModel):
id: int
route_id: int
pokemon_id: int
game_id: int
encounter_method: str
encounter_rate: int
min_level: int
max_level: int
class RouteEncounterDetailResponse(RouteEncounterResponse):
pokemon: PokemonResponse
class PokemonEncounterLocationItem(CamelModel):
route_id: int
route_name: str
encounter_method: str
encounter_rate: int
min_level: int
max_level: int
class PokemonEncounterLocationResponse(CamelModel):
game_id: int
game_name: str
encounters: list[PokemonEncounterLocationItem]
# --- Admin schemas ---
class PokemonCreate(CamelModel):
pokeapi_id: int
national_dex: int
name: str
types: list[str]
sprite_url: str | None = None
class PokemonUpdate(CamelModel):
pokeapi_id: int | None = None
national_dex: int | None = None
name: str | None = None
types: list[str] | None = None
sprite_url: str | None = None
class RouteEncounterCreate(CamelModel):
pokemon_id: int
game_id: int
encounter_method: str
encounter_rate: int
min_level: int
max_level: int
class RouteEncounterUpdate(CamelModel):
encounter_method: str | None = None
encounter_rate: int | None = None
min_level: int | None = None
max_level: int | None = None
class BulkImportItem(BaseModel):
pokeapi_id: int
national_dex: int
name: str
types: list[str]
sprite_url: str | None = None
class BulkImportResult(CamelModel):
created: int
updated: int
errors: list[str]
# --- Evolution admin schemas ---
class EvolutionAdminResponse(CamelModel):
id: int
from_pokemon_id: int
to_pokemon_id: int
from_pokemon: PokemonResponse
to_pokemon: PokemonResponse
trigger: str
min_level: int | None
item: str | None
held_item: str | None
condition: str | None
region: str | None
class PaginatedEvolutionResponse(CamelModel):
items: list[EvolutionAdminResponse]
total: int
limit: int
offset: int
class EvolutionCreate(CamelModel):
from_pokemon_id: int
to_pokemon_id: int
trigger: str
min_level: int | None = None
item: str | None = None
held_item: str | None = None
condition: str | None = None
region: str | None = None
class EvolutionUpdate(CamelModel):
from_pokemon_id: int | None = None
to_pokemon_id: int | None = None
trigger: str | None = None
min_level: int | None = None
item: str | None = None
held_item: str | None = None
condition: str | None = None
region: str | None = None
# --- Bulk import schemas (match export format, snake_case) ---
class BulkEvolutionItem(BaseModel):
from_pokeapi_id: int
to_pokeapi_id: int
trigger: str
min_level: int | None = None
item: str | None = None
held_item: str | None = None
condition: str | None = None
region: str | None = None
class BulkRouteEncounterItem(BaseModel):
pokeapi_id: int
method: str
encounter_rate: int
min_level: int
max_level: int
class BulkRouteChildItem(BaseModel):
name: str
order: int
pinwheel_zone: int | None = None
encounters: list[BulkRouteEncounterItem] = []
class BulkRouteItem(BaseModel):
name: str
order: int
encounters: list[BulkRouteEncounterItem] = []
children: list[BulkRouteChildItem] = []
class BulkBossPokemonItem(BaseModel):
pokeapi_id: int
level: int
order: int
condition_label: str | None = None
class BulkBossItem(BaseModel):
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_name: str | None = None
location: str
section: str | None = None
sprite_url: str | None = None
game_slug: str | None = None
pokemon: list[BulkBossPokemonItem] = []