from datetime import datetime from typing import Optional from pydantic import BaseModel, Field # Category schemas class CategoryBase(BaseModel): """Base category schema.""" name: str description: Optional[str] = None class CategoryCreate(CategoryBase): """Category creation schema.""" pass class CategoryUpdate(BaseModel): """Category update schema.""" name: Optional[str] = None description: Optional[str] = None class Category(CategoryBase): """Category schema to return to client.""" id: str created_at: datetime updated_at: datetime class Config: """Configuration for the schema.""" from_attributes = True # Product schemas class ProductBase(BaseModel): """Base product schema.""" name: str description: Optional[str] = None price: float = Field(..., gt=0) sku: str is_active: bool = True category_id: Optional[str] = None class ProductCreate(ProductBase): """Product creation schema.""" pass class ProductUpdate(BaseModel): """Product update schema.""" name: Optional[str] = None description: Optional[str] = None price: Optional[float] = Field(None, gt=0) sku: Optional[str] = None is_active: Optional[bool] = None category_id: Optional[str] = None class ProductWithCategory(ProductBase): """Product schema with category to return to client.""" id: str created_at: datetime updated_at: datetime category: Optional[Category] = None class Config: """Configuration for the schema.""" from_attributes = True class Product(ProductBase): """Product schema to return to client.""" id: str created_at: datetime updated_at: datetime class Config: """Configuration for the schema.""" from_attributes = True