62 lines
1.3 KiB
Python
62 lines
1.3 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.models.enums import EventStatus, EventType, TicketTypeStatus
|
|
|
|
|
|
class VenuePublic(BaseModel):
|
|
id: int
|
|
slug: str
|
|
name: str
|
|
area: str
|
|
city: str
|
|
address: str
|
|
map_url: str | None = None
|
|
description: str | None = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class EventMediaPublic(BaseModel):
|
|
id: int
|
|
image_url: str
|
|
alt_text: str | None
|
|
sort_order: int
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class TicketTypePublic(BaseModel):
|
|
id: int
|
|
name: str
|
|
description: str | None
|
|
price_paise: int = Field(ge=0)
|
|
status: TicketTypeStatus
|
|
sort_order: int
|
|
remaining_quantity: int = Field(ge=0)
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class EventSummary(BaseModel):
|
|
id: int
|
|
slug: str
|
|
title: str
|
|
category: EventType
|
|
status: EventStatus
|
|
starts_at: datetime
|
|
ends_at: datetime | None
|
|
is_featured: bool
|
|
cover_image_url: str | None
|
|
cover_image_alt: str | None
|
|
venue: VenuePublic
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class EventDetail(EventSummary):
|
|
description: str | None
|
|
meta_description: str | None
|
|
media: list[EventMediaPublic]
|
|
ticket_types: list[TicketTypePublic]
|