Files
sibuti/transport/backend/app/routers/events.py

62 lines
1.8 KiB
Python
Raw Normal View History

2025-12-18 21:13:49 +03:00
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