from fastapi import APIRouter, Depends from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import selectinload from app.db.session import get_session from app.models.car import CarMake from app.schemas.car import CarMakeRead router = APIRouter(prefix="/catalog", tags=["catalog"]) @router.get("/makes", response_model=list[CarMakeRead]) async def list_makes(session: AsyncSession = Depends(get_session)) -> list[CarMake]: result = await session.execute( select(CarMake).options(selectinload(CarMake.models)).order_by(CarMake.name) ) makes = list(result.scalars()) for make in makes: make.models.sort(key=lambda model: model.name) return makes