from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.core.database import get_db from app.core.operation_guard import require_operations_enabled from app.core.security import require_api_key from app.modules.events.constants import EventResponseKey from app.modules.events.service import EventService, _serialize_event router = APIRouter(dependencies=[Depends(require_api_key)]) @router.get("") def list_events( status: str | None = None, event_type: str | None = None, limit: int = Query(default=100, ge=1, le=500), db: Session = Depends(get_db), ) -> dict: return { EventResponseKey.ITEMS: EventService(db).list_events( status_filter=status, event_type=event_type, limit=limit, ) } @router.post("/{event_id}/dispatch") def dispatch_event( event_id: str, db: Session = Depends(get_db), ) -> dict: require_operations_enabled() return {EventResponseKey.EVENT: _serialize_event(EventService(db).dispatch_event(event_id))} @router.post("/dispatch-pending") def dispatch_pending( limit: int = Query(default=100, ge=1, le=500), db: Session = Depends(get_db), ) -> dict: require_operations_enabled() return {EventResponseKey.ITEMS: EventService(db).dispatch_pending(limit=limit)}