33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
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)
|