90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
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}
|