from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime class CategoryBase(BaseModel): name: str = Field(..., min_length=1, max_length=100) parent_id: Optional[int] = None level: int = Field(default=1, ge=1, le=2) icon: Optional[str] = None sort_order: int = 0 class CategoryCreate(CategoryBase): pass class CategoryUpdate(BaseModel): name: Optional[str] = None parent_id: Optional[int] = None level: Optional[int] = None icon: Optional[str] = None sort_order: Optional[int] = None class CategoryResponse(CategoryBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class CategoryWithChildren(CategoryResponse): children: List["CategoryResponse"] = []