category.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. """商品分类Schema"""
  2. from typing import Optional, List
  3. from pydantic import BaseModel, Field
  4. class CategoryBase(BaseModel):
  5. """分类基础Schema"""
  6. name: str = Field(..., description="分类名称")
  7. image_url: Optional[str] = Field(None, description="分类图片URL")
  8. parent_id: Optional[str] = Field(None, description="父分类ID")
  9. sort_order: int = Field(0, description="排序")
  10. is_active: bool = Field(True, description="是否启用")
  11. class CategoryCreate(CategoryBase):
  12. """创建分类"""
  13. pass
  14. class CategoryUpdate(BaseModel):
  15. """更新分类"""
  16. name: Optional[str] = Field(None, description="分类名称")
  17. image_url: Optional[str] = Field(None, description="分类图片URL")
  18. parent_id: Optional[str] = Field(None, description="父分类ID")
  19. sort_order: Optional[int] = Field(None, description="排序")
  20. is_active: Optional[bool] = Field(None, description="是否启用")
  21. class CategoryTreeNode(BaseModel):
  22. """分类树节点"""
  23. id: str
  24. name: str
  25. parentId: Optional[str] = None
  26. sortOrder: int = 0
  27. isActive: bool = True
  28. children: List["CategoryTreeNode"] = []
  29. class Config:
  30. from_attributes = True
  31. class CategoryResponse(CategoryBase):
  32. """分类响应"""
  33. id: str
  34. create_at: Optional[str] = None
  35. create_by: Optional[str] = None
  36. create_name: Optional[str] = None
  37. update_at: Optional[str] = None
  38. update_by: Optional[str] = None
  39. class Config:
  40. from_attributes = True
  41. class CategoryListResponse(BaseModel):
  42. """分类列表响应"""
  43. items: List[CategoryResponse]
  44. total: int
  45. page: int
  46. pageSize: int
  47. totalPages: int