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