from fastapi import APIRouter, Query from app.core.deps import DbSession from app.models.enums import EventStatus, EventType from app.schemas.catalog import EventDetail, EventSummary from app.schemas.orders import EventTicketTypePublic from app.services.catalog import event_to_detail, event_to_summary, get_event_by_slug, list_events from app.services.orders import list_event_ticket_types router = APIRouter(prefix="/events", tags=["events"]) @router.get("", response_model=list[EventSummary]) def get_events( db: DbSession, category: EventType | None = Query(default=None), status: EventStatus | None = Query(default=EventStatus.published), upcoming: bool = Query(default=True), ) -> list[EventSummary]: rows = list_events(db, category=category, status=status, upcoming=upcoming) return [event_to_summary(row) for row in rows] @router.get("/{event_id:int}/tickets", response_model=list[EventTicketTypePublic]) def get_event_tickets(event_id: int, db: DbSession) -> list[EventTicketTypePublic]: rows = list_event_ticket_types(db, event_id) return [EventTicketTypePublic.model_validate(row) for row in rows] @router.get("/{slug}", response_model=EventDetail) def get_event(slug: str, db: DbSession) -> EventDetail: event = get_event_by_slug(db, slug=slug) return event_to_detail(event)