Files
nuzlocke-tracker/backend/src/app/api/pokemon.py

44 lines
1.4 KiB
Python
Raw Normal View History

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload
from app.core.database import get_session
from app.models.pokemon import Pokemon
from app.models.route import Route
from app.models.route_encounter import RouteEncounter
from app.schemas.pokemon import PokemonResponse, RouteEncounterDetailResponse
router = APIRouter()
@router.get("/pokemon/{pokemon_id}", response_model=PokemonResponse)
async def get_pokemon(
pokemon_id: int, session: AsyncSession = Depends(get_session)
):
pokemon = await session.get(Pokemon, pokemon_id)
if pokemon is None:
raise HTTPException(status_code=404, detail="Pokemon not found")
return pokemon
@router.get(
"/routes/{route_id}/pokemon",
response_model=list[RouteEncounterDetailResponse],
)
async def list_route_encounters(
route_id: int, session: AsyncSession = Depends(get_session)
):
# Verify route exists
route = await session.get(Route, route_id)
if route is None:
raise HTTPException(status_code=404, detail="Route not found")
result = await session.execute(
select(RouteEncounter)
.where(RouteEncounter.route_id == route_id)
.options(joinedload(RouteEncounter.pokemon))
.order_by(RouteEncounter.encounter_rate.desc())
)
return result.scalars().unique().all()