import asyncpg from typing import List, Dict class VehiclesRepository: """Repository for hierarchical vehicle queries against normalized schema""" async def get_years(self, db: asyncpg.Connection) -> List[int]: rows = await db.fetch( """ SELECT DISTINCT year FROM vehicles.model_year ORDER BY year DESC """ ) return [r["year"] for r in rows] async def get_makes(self, db: asyncpg.Connection, year: int) -> List[Dict]: rows = await db.fetch( """ SELECT DISTINCT ma.id, ma.name FROM vehicles.make ma JOIN vehicles.model mo ON mo.make_id = ma.id JOIN vehicles.model_year my ON my.model_id = mo.id AND my.year = $1 ORDER BY ma.name """, year, ) return [{"id": r["id"], "name": r["name"]} for r in rows] async def get_models(self, db: asyncpg.Connection, year: int, make_id: int) -> List[Dict]: rows = await db.fetch( """ SELECT DISTINCT mo.id, mo.name FROM vehicles.model mo JOIN vehicles.model_year my ON my.model_id = mo.id AND my.year = $1 WHERE mo.make_id = $2 ORDER BY mo.name """, year, make_id, ) return [{"id": r["id"], "name": r["name"]} for r in rows] async def get_trims(self, db: asyncpg.Connection, year: int, model_id: int) -> List[Dict]: rows = await db.fetch( """ SELECT t.id, t.name FROM vehicles.trim t JOIN vehicles.model_year my ON my.id = t.model_year_id WHERE my.year = $1 AND my.model_id = $2 ORDER BY t.name """, year, model_id, ) return [{"id": r["id"], "name": r["name"]} for r in rows] async def get_engines( self, db: asyncpg.Connection, year: int, model_id: int, trim_id: int ) -> List[Dict]: rows = await db.fetch( """ SELECT DISTINCT e.id, e.name FROM vehicles.engine e JOIN vehicles.trim_engine te ON te.engine_id = e.id JOIN vehicles.trim t ON t.id = te.trim_id JOIN vehicles.model_year my ON my.id = t.model_year_id WHERE my.year = $1 AND my.model_id = $2 AND t.id = $3 ORDER BY e.name """, year, model_id, trim_id, ) return [{"id": r["id"], "name": r["name"]} for r in rows]