from typing import List, Optional from datetime import datetime from pydantic import BaseModel, Field from app.models.order import OrderStatus from app.schemas.product import Product class OrderItemBase(BaseModel): product_id: int quantity: int = Field(..., gt=0) unit_price: float = Field(..., gt=0) class OrderItemCreate(OrderItemBase): pass class OrderItemInDBBase(OrderItemBase): id: int order_id: int class Config: orm_mode = True class OrderItem(OrderItemInDBBase): pass class OrderItemWithProduct(OrderItemInDBBase): product: Product class OrderBase(BaseModel): total_amount: float = Field(..., gt=0) status: OrderStatus = OrderStatus.PENDING shipping_address: Optional[str] = None class OrderCreate(BaseModel): shipping_address: Optional[str] = None items: List[OrderItemCreate] class OrderInDBBase(OrderBase): id: int user_id: int created_at: datetime updated_at: datetime class Config: orm_mode = True class Order(OrderInDBBase): pass class OrderWithItems(OrderInDBBase): items: List[OrderItemWithProduct]