Files
sibuti/transport/backend/app/routers/events.py
2025-12-18 21:13:49 +03:00

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