rswag-online/backend/app/schemas/order.py

77 lines
1.5 KiB
Python

"""Order schemas."""
from datetime import datetime
from enum import Enum
from uuid import UUID
from pydantic import BaseModel
class OrderStatus(str, Enum):
"""Order status enum."""
PENDING = "pending"
PAID = "paid"
PROCESSING = "processing"
PRINTING = "printing"
SHIPPED = "shipped"
DELIVERED = "delivered"
CANCELLED = "cancelled"
REFUNDED = "refunded"
class OrderItemResponse(BaseModel):
"""Order item in response."""
id: UUID
product_slug: str
product_name: str
variant: str | None
quantity: int
unit_price: float
pod_provider: str | None
pod_status: str | None
pod_tracking_number: str | None
pod_tracking_url: str | None
class Config:
from_attributes = True
class OrderResponse(BaseModel):
"""Order response."""
id: UUID
status: str
shipping_name: str | None
shipping_email: str | None
shipping_city: str | None
shipping_country: str | None
subtotal: float | None
shipping_cost: float | None
tax: float | None
total: float | None
currency: str
items: list[OrderItemResponse]
created_at: datetime
paid_at: datetime | None
shipped_at: datetime | None
class Config:
from_attributes = True
class CheckoutRequest(BaseModel):
"""Request to create checkout session."""
cart_id: UUID
success_url: str
cancel_url: str
class CheckoutResponse(BaseModel):
"""Checkout session response."""
checkout_url: str
session_id: str