from datetime import datetime from typing import Optional from pydantic import BaseModel, Field # Category schemas class CategoryBase(BaseModel): name: str description: Optional[str] = None class CategoryCreate(CategoryBase): pass class CategoryUpdate(CategoryBase): name: Optional[str] = None class CategoryInDBBase(CategoryBase): id: int created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True class Category(CategoryInDBBase): pass # Product schemas class ProductBase(BaseModel): name: str description: Optional[str] = None price: float = Field(..., gt=0) stock: int = Field(0, ge=0) image_url: Optional[str] = None is_active: bool = True category_id: Optional[int] = None class ProductCreate(ProductBase): pass class ProductUpdate(ProductBase): name: Optional[str] = None price: Optional[float] = Field(None, gt=0) stock: Optional[int] = Field(None, ge=0) category_id: Optional[int] = None class ProductInDBBase(ProductBase): id: int created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True class Product(ProductInDBBase): category: Optional[Category] = None # Product search and filtering class ProductFilterParams(BaseModel): name: Optional[str] = None category_id: Optional[int] = None min_price: Optional[float] = None max_price: Optional[float] = None in_stock: Optional[bool] = None