40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
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 |