from pydantic import BaseModel, Field from typing import Optional from decimal import Decimal class SoapBase(BaseModel): name: str = Field(..., index=True, min_length=1, max_length=100) brand: str = Field(..., min_length=1, max_length=100) description: Optional[str] = None price: Decimal = Field(..., ge=0, decimal_places=2) weight: Decimal = Field(..., ge=0, decimal_places=2) ingredients: Optional[str] = None stock_quantity: int = Field(default=0, ge=0) is_available: bool = Field(default=True) fragrance: Optional[str] = None type: Optional[str] = None class SoapCreate(SoapBase): class Config: schema_extra = { "example": { "name": "Lavender Dreams", "brand": "Natural Care", "description": "Relaxing lavender soap bar", "price": "5.99", "weight": "100.00", "ingredients": "Coconut oil, lavender essential oil, sodium hydroxide", "stock_quantity": 100, "is_available": True, "fragrance": "Lavender", "type": "Bar soap" } } class Soap(SoapBase): id: int = Field(..., gt=0) class Config: orm_mode = True