from typing import List, Optional from datetime import datetime from pydantic import BaseModel class OrderItemBase(BaseModel): product_id: int quantity: int = 1 unit_price: float class OrderItemCreate(OrderItemBase): pass class OrderItemInDBBase(OrderItemBase): id: int order_id: int class Config: orm_mode = True class OrderItem(OrderItemInDBBase): pass class OrderBase(BaseModel): customer_id: int status: str = "pending" total_amount: float shipping_address: Optional[str] = None shipping_city: Optional[str] = None shipping_state: Optional[str] = None shipping_zip: Optional[str] = None shipping_country: Optional[str] = None class OrderCreate(OrderBase): items: List[OrderItemCreate] class OrderUpdate(BaseModel): status: Optional[str] = None payment_status: Optional[str] = None shipping_address: Optional[str] = None shipping_city: Optional[str] = None shipping_state: Optional[str] = None shipping_zip: Optional[str] = None shipping_country: Optional[str] = None class OrderInDBBase(OrderBase): id: int order_number: str payment_intent_id: Optional[str] = None payment_status: str created_at: datetime updated_at: Optional[datetime] = None class Config: orm_mode = True class Order(OrderInDBBase): items: List[OrderItem] = [] class PaymentIntentResponse(BaseModel): client_secret: str payment_intent_id: str