from datetime import datetime from pydantic import BaseModel, Field from app.models.enums import OrderStatus, TicketStatus, TicketTypeStatus class PaymentCheckoutPublic(BaseModel): provider: str key_id: str provider_order_id: str amount_paise: int currency: str order_id: int expires_at: datetime | None = None timeout_minutes: int class EventTicketTypePublic(BaseModel): id: int event_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 OrderLineCreate(BaseModel): ticket_type_id: int = Field(gt=0) quantity: int = Field(ge=1, le=20) class OrderCreate(BaseModel): event_id: int = Field(gt=0) items: list[OrderLineCreate] = Field(min_length=1, max_length=20) class OrderItemPublic(BaseModel): id: int ticket_type_id: int quantity: int unit_price_paise: int line_total_paise: int model_config = {"from_attributes": True} class OrderPublic(BaseModel): id: int event_id: int status: OrderStatus total_paise: int currency: str payment_reference: str | None provider_order_id: str | None = None provider_payment_id: str | None = None expires_at: datetime | None = None paid_at: datetime | None = None created_at: datetime items: list[OrderItemPublic] model_config = {"from_attributes": True} class OrderCheckoutResponse(OrderPublic): payment: PaymentCheckoutPublic class PaymentVerifyRequest(BaseModel): provider_order_id: str = Field(min_length=1, max_length=64) provider_payment_id: str = Field(min_length=1, max_length=64) signature: str = Field(min_length=1, max_length=256) class TicketPublic(BaseModel): id: int code: str order_id: int ticket_type_id: int event_id: int status: TicketStatus created_at: datetime ticket_type_name: str | None = None event_title: str | None = None model_config = {"from_attributes": True}