user.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. """
  2. User schemas for request/response validation.
  3. Defines Pydantic models for user management and statistics.
  4. """
  5. from pydantic import BaseModel, Field
  6. from typing import Optional, List
  7. from datetime import datetime
  8. class TaskStats(BaseModel):
  9. """用户任务统计信息"""
  10. assigned_count: int = Field(default=0, description="已分配任务数")
  11. completed_count: int = Field(default=0, description="已完成任务数")
  12. in_progress_count: int = Field(default=0, description="进行中任务数")
  13. pending_count: int = Field(default=0, description="待处理任务数")
  14. annotation_count: int = Field(default=0, description="标注数据条数")
  15. completion_rate: float = Field(default=0.0, description="完成率")
  16. class UserResponse(BaseModel):
  17. """用户基本信息响应"""
  18. id: str = Field(..., description="用户ID")
  19. username: str = Field(..., description="用户名")
  20. email: str = Field(..., description="邮箱")
  21. role: str = Field(..., description="用户角色")
  22. created_at: datetime = Field(..., description="创建时间")
  23. class Config:
  24. from_attributes = True
  25. class UserWithStatsResponse(UserResponse):
  26. """带统计信息的用户响应"""
  27. task_stats: TaskStats = Field(default_factory=TaskStats, description="任务统计")
  28. class AssignableUserResponse(BaseModel):
  29. """可分配用户响应(用于任务分配)"""
  30. id: str = Field(..., description="用户ID")
  31. username: str = Field(..., description="用户名")
  32. email: str = Field(..., description="邮箱")
  33. current_task_count: int = Field(default=0, description="当前任务数")
  34. completed_task_count: int = Field(default=0, description="已完成任务数")
  35. class UserListResponse(BaseModel):
  36. """用户列表响应"""
  37. users: List[UserWithStatsResponse] = Field(..., description="用户列表")
  38. total: int = Field(..., description="总数")
  39. class UserStatsResponse(BaseModel):
  40. """用户详细统计响应"""
  41. user: UserResponse = Field(..., description="用户信息")
  42. task_stats: TaskStats = Field(..., description="任务统计")
  43. recent_tasks: List[dict] = Field(default_factory=list, description="最近任务")