from typing import Optional, List from datetime import datetime from pydantic import BaseModel, Field, HttpUrl 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 class Config: orm_mode = True class Category(CategoryInDBBase): pass class ProductBase(BaseModel): name: str description: Optional[str] = None price: float = Field(..., gt=0) stock: int = Field(0, ge=0) is_active: bool = True category_id: Optional[int] = None image_url: Optional[str] = None class ProductCreate(ProductBase): pass class ProductUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None price: Optional[float] = Field(None, gt=0) stock: Optional[int] = Field(None, ge=0) is_active: Optional[bool] = None category_id: Optional[int] = None image_url: Optional[str] = None class ProductInDBBase(ProductBase): id: int created_at: datetime updated_at: Optional[datetime] = None class Config: orm_mode = True class Product(ProductInDBBase): category: Optional[Category] = None class ProductInDB(ProductInDBBase): pass