Locations like Mt. Moon (with 1F, B1F, B2F floors) are now grouped so only one encounter can be logged per location group, enforcing Nuzlocke first-encounter rules correctly. - Add parent_route_id column with self-referential FK to routes table - Add parent/children relationships on Route model - Update games API to return hierarchical route structure - Add validation in encounters API to prevent parent route encounters and duplicate encounters within sibling routes (409 conflict) - Update frontend with collapsible RouteGroup component - Auto-derive route groups from PokeAPI location/location-area structure - Regenerate seed data with 70 parent routes and 315 child routes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
70 lines
1.3 KiB
Python
70 lines
1.3 KiB
Python
from app.schemas.base import CamelModel
|
|
|
|
|
|
class RouteResponse(CamelModel):
|
|
id: int
|
|
name: str
|
|
game_id: int
|
|
order: int
|
|
parent_route_id: int | None = None
|
|
|
|
|
|
class GameResponse(CamelModel):
|
|
id: int
|
|
name: str
|
|
slug: str
|
|
generation: int
|
|
region: str
|
|
box_art_url: str | None
|
|
release_year: int | None
|
|
|
|
|
|
class RouteWithChildrenResponse(RouteResponse):
|
|
children: list[RouteResponse] = []
|
|
|
|
|
|
class GameDetailResponse(GameResponse):
|
|
routes: list[RouteResponse] = []
|
|
|
|
|
|
# --- Admin schemas ---
|
|
|
|
|
|
class GameCreate(CamelModel):
|
|
name: str
|
|
slug: str
|
|
generation: int
|
|
region: str
|
|
box_art_url: str | None = None
|
|
release_year: int | None = None
|
|
|
|
|
|
class GameUpdate(CamelModel):
|
|
name: str | None = None
|
|
slug: str | None = None
|
|
generation: int | None = None
|
|
region: str | None = None
|
|
box_art_url: str | None = None
|
|
release_year: int | None = None
|
|
|
|
|
|
class RouteCreate(CamelModel):
|
|
name: str
|
|
order: int
|
|
parent_route_id: int | None = None
|
|
|
|
|
|
class RouteUpdate(CamelModel):
|
|
name: str | None = None
|
|
order: int | None = None
|
|
parent_route_id: int | None = None
|
|
|
|
|
|
class RouteReorderItem(CamelModel):
|
|
id: int
|
|
order: int
|
|
|
|
|
|
class RouteReorderRequest(CamelModel):
|
|
routes: list[RouteReorderItem]
|