from typing import List, Optional from pydantic import BaseModel, Field from datetime import datetime # Category schemas class CategoryBase(BaseModel): name: str description: Optional[str] = None class CategoryCreate(CategoryBase): pass class CategoryUpdate(CategoryBase): name: Optional[str] = None class CategoryInDB(CategoryBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True # Product schemas class ProductBase(BaseModel): name: str description: Optional[str] = None sku: str = Field(..., description="Stock Keeping Unit, unique identifier") price: float = Field(..., gt=0) cost_price: float = Field(..., gt=0) barcode: Optional[str] = None category_id: Optional[int] = None class ProductCreate(ProductBase): pass class ProductUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None sku: Optional[str] = None price: Optional[float] = Field(None, gt=0) cost_price: Optional[float] = Field(None, gt=0) barcode: Optional[str] = None category_id: Optional[int] = None class ProductInDB(ProductBase): id: int created_at: datetime updated_at: datetime category: Optional[CategoryInDB] = None class Config: from_attributes = True