55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, Field, HttpUrl
|
|
|
|
|
|
class ProductBase(BaseModel):
|
|
"""Base schema for product data."""
|
|
|
|
name: str
|
|
description: Optional[str] = None
|
|
price: float = Field(gt=0)
|
|
stock: int = Field(ge=0, default=0)
|
|
image_url: Optional[HttpUrl] = None
|
|
anime_title: Optional[str] = None
|
|
character_name: Optional[str] = None
|
|
|
|
|
|
class ProductCreate(ProductBase):
|
|
"""Schema for creating a new product."""
|
|
|
|
category_ids: List[int] = []
|
|
|
|
|
|
class ProductUpdate(BaseModel):
|
|
"""Schema for updating a product."""
|
|
|
|
name: Optional[str] = None
|
|
description: Optional[str] = None
|
|
price: Optional[float] = Field(gt=0, default=None)
|
|
stock: Optional[int] = Field(ge=0, default=None)
|
|
image_url: Optional[HttpUrl] = None
|
|
anime_title: Optional[str] = None
|
|
character_name: Optional[str] = None
|
|
category_ids: Optional[List[int]] = None
|
|
|
|
|
|
class CategoryInProduct(BaseModel):
|
|
"""Schema for category data in product responses."""
|
|
|
|
id: int
|
|
name: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProductResponse(ProductBase):
|
|
"""Schema for product responses."""
|
|
|
|
id: int
|
|
categories: List[CategoryInProduct] = []
|
|
|
|
class Config:
|
|
from_attributes = True
|