from typing import Optional from pydantic import Field, condecimal from app.schemas.base import BaseSchema, BaseSchemaIDTimestamps class ProductBase(BaseSchema): """Base schema for product.""" name: str description: Optional[str] = None price: condecimal(ge=0, decimal_places=2) = Field(..., description="Product price") sku: Optional[str] = None is_service: bool = False tax_rate: condecimal(ge=0, decimal_places=2) = Field(0, description="Tax rate in percentage") class ProductCreate(ProductBase): """Schema for creating a product.""" pass class ProductUpdate(BaseSchema): """Schema for updating a product.""" name: Optional[str] = None description: Optional[str] = None price: Optional[condecimal(ge=0, decimal_places=2)] = None sku: Optional[str] = None is_service: Optional[bool] = None tax_rate: Optional[condecimal(ge=0, decimal_places=2)] = None class ProductInDBBase(ProductBase, BaseSchemaIDTimestamps): """Base schema for product in database.""" user_id: int class Product(ProductInDBBase): """Schema for product.""" pass