from datetime import datetime from typing import Optional from fastapi import APIRouter, Depends, Query from sqlalchemy import select, desc from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.models import Event from app.schemas import EventResponse router = APIRouter() @router.get("", response_model=list[EventResponse]) async def get_events( type: Optional[str] = None, vehicle_id: Optional[int] = None, from_time: Optional[datetime] = Query(None, alias="from"), to_time: Optional[datetime] = Query(None, alias="to"), limit: int = Query(100, le=1000), db: AsyncSession = Depends(get_db) ): """Получить список событий""" query = select(Event) if type: query = query.where(Event.type == type) if vehicle_id: query = query.where(Event.vehicle_id == vehicle_id) if from_time: query = query.where(Event.timestamp >= from_time) if to_time: query = query.where(Event.timestamp <= to_time) query = query.order_by(desc(Event.timestamp)).limit(limit) result = await db.execute(query) events = result.scalars().all() return events @router.get("/vehicles/{vehicle_id}/events", response_model=list[EventResponse]) async def get_vehicle_events( vehicle_id: int, type: Optional[str] = None, limit: int = Query(100, le=1000), db: AsyncSession = Depends(get_db) ): """Получить события конкретного транспортного средства""" query = select(Event).where(Event.vehicle_id == vehicle_id) if type: query = query.where(Event.type == type) query = query.order_by(desc(Event.timestamp)).limit(limit) result = await db.execute(query) events = result.scalars().all() return events