Desi-Clans/backend/app/schemas/orders.py
2026-10-08 02:52:58 +05:30

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}