62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
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
|