open_project.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """
  2. Pydantic schemas for Open API project endpoints.
  3. """
  4. from enum import Enum
  5. from datetime import datetime
  6. from typing import Optional, List
  7. from pydantic import BaseModel, Field
  8. class ProjectType(str, Enum):
  9. IMAGE = "image"
  10. TEXT = "text"
  11. class OpenProjectItem(BaseModel):
  12. project_id: str = Field(..., description="项目ID")
  13. project_name: str = Field(..., description="项目名称")
  14. description: str = Field(default="", description="项目描述")
  15. project_type: ProjectType = Field(..., description="项目类型")
  16. task_type: str = Field(..., description="任务类型")
  17. status: str = Field(..., description="项目状态")
  18. created_by: str = Field(default="", description="创建人")
  19. created_at: datetime = Field(..., description="创建时间")
  20. updated_at: Optional[datetime] = Field(None, description="更新时间")
  21. task_count: int = Field(default=0, description="总任务数")
  22. completed_task_count: int = Field(default=0, description="已完成任务数")
  23. class OpenProjectDetailItem(OpenProjectItem):
  24. assigned_task_count: int = Field(default=0, description="已分配任务数")
  25. completion_percentage: float = Field(default=0.0, description="完成率")
  26. class OpenProjectListData(BaseModel):
  27. items: List[OpenProjectItem]
  28. total: int
  29. page: int
  30. page_size: int
  31. total_pages: int
  32. has_next: bool
  33. has_prev: bool
  34. class OpenProjectListResponse(BaseModel):
  35. code: int = Field(default=0)
  36. message: str = Field(default="success")
  37. data: OpenProjectListData
  38. class OpenProjectDetailResponse(BaseModel):
  39. code: int = Field(default=0)
  40. message: str = Field(default="success")
  41. data: OpenProjectDetailItem