59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
import asyncpg
|
|
from typing import List, Dict
|
|
from ..services.cache_service import CacheService
|
|
from ..repositories.vehicles_repository import VehiclesRepository
|
|
|
|
|
|
class VehiclesService:
|
|
def __init__(self, cache: CacheService, repo: VehiclesRepository | None = None):
|
|
self.cache = cache
|
|
self.repo = repo or VehiclesRepository()
|
|
|
|
async def get_years(self, db: asyncpg.Connection) -> List[int]:
|
|
cache_key = "dropdown:years"
|
|
cached = await self.cache.get(cache_key)
|
|
if cached:
|
|
return cached
|
|
years = await self.repo.get_years(db)
|
|
await self.cache.set(cache_key, years, ttl=6 * 3600)
|
|
return years
|
|
|
|
async def get_makes(self, db: asyncpg.Connection, year: int) -> List[Dict]:
|
|
cache_key = f"dropdown:makes:{year}"
|
|
cached = await self.cache.get(cache_key)
|
|
if cached:
|
|
return cached
|
|
makes = await self.repo.get_makes(db, year)
|
|
await self.cache.set(cache_key, makes, ttl=6 * 3600)
|
|
return makes
|
|
|
|
async def get_models(self, db: asyncpg.Connection, year: int, make_id: int) -> List[Dict]:
|
|
cache_key = f"dropdown:models:{year}:{make_id}"
|
|
cached = await self.cache.get(cache_key)
|
|
if cached:
|
|
return cached
|
|
models = await self.repo.get_models(db, year, make_id)
|
|
await self.cache.set(cache_key, models, ttl=6 * 3600)
|
|
return models
|
|
|
|
async def get_trims(self, db: asyncpg.Connection, year: int, model_id: int) -> List[Dict]:
|
|
cache_key = f"dropdown:trims:{year}:{model_id}"
|
|
cached = await self.cache.get(cache_key)
|
|
if cached:
|
|
return cached
|
|
trims = await self.repo.get_trims(db, year, model_id)
|
|
await self.cache.set(cache_key, trims, ttl=6 * 3600)
|
|
return trims
|
|
|
|
async def get_engines(
|
|
self, db: asyncpg.Connection, year: int, model_id: int, trim_id: int
|
|
) -> List[Dict]:
|
|
cache_key = f"dropdown:engines:{year}:{model_id}:{trim_id}"
|
|
cached = await self.cache.get(cache_key)
|
|
if cached:
|
|
return cached
|
|
engines = await self.repo.get_engines(db, year, model_id, trim_id)
|
|
await self.cache.set(cache_key, engines, ttl=6 * 3600)
|
|
return engines
|
|
|