26 lines
877 B
Python
26 lines
877 B
Python
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, CarModel
|
|
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).selectinload(CarModel.trims))
|
|
.order_by(CarMake.name)
|
|
)
|
|
makes = list(result.scalars())
|
|
for make in makes:
|
|
make.models.sort(key=lambda model: model.name)
|
|
for model in make.models:
|
|
model.trims.sort(key=lambda trim: trim.name)
|
|
return makes
|