from datetime import datetime from typing import List, Optional from pydantic import BaseModel, Field from app.models.order import OrderStatus from app.schemas.product import Product # Shared properties class OrderItemBase(BaseModel): product_id: int quantity: int = Field(..., gt=0) # Properties to receive on order item creation class OrderItemCreate(OrderItemBase): pass # Additional properties stored in DB for order item class OrderItemInDBBase(OrderItemBase): id: int order_id: int unit_price: float created_at: datetime class Config: from_attributes = True # Additional properties to return via API class OrderItem(OrderItemInDBBase): pass class OrderItemWithProduct(OrderItem): product: Product # Shared properties for order class OrderBase(BaseModel): shipping_address: Optional[str] = None # Properties to receive on order creation class OrderCreate(OrderBase): shipping_address: str # Properties to receive on order update class OrderUpdate(BaseModel): status: OrderStatus class OrderInDBBase(OrderBase): id: int user_id: int status: OrderStatus total_amount: float created_at: datetime updated_at: datetime class Config: from_attributes = True # Additional properties to return via API class Order(OrderInDBBase): pass # Additional properties stored in DB class OrderInDB(OrderInDBBase): pass class OrderWithItems(Order): items: List[OrderItemWithProduct]