""" User schemas for request/response validation. Defines Pydantic models for user management and statistics. """ from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime class TaskStats(BaseModel): """用户任务统计信息""" assigned_count: int = Field(default=0, description="已分配任务数") completed_count: int = Field(default=0, description="已完成任务数") in_progress_count: int = Field(default=0, description="进行中任务数") pending_count: int = Field(default=0, description="待处理任务数") annotation_count: int = Field(default=0, description="标注数据条数") completion_rate: float = Field(default=0.0, description="完成率") class UserResponse(BaseModel): """用户基本信息响应""" id: str = Field(..., description="用户ID") username: str = Field(..., description="用户名") email: str = Field(..., description="邮箱") role: str = Field(..., description="用户角色") created_at: datetime = Field(..., description="创建时间") class Config: from_attributes = True class UserWithStatsResponse(UserResponse): """带统计信息的用户响应""" task_stats: TaskStats = Field(default_factory=TaskStats, description="任务统计") class AssignableUserResponse(BaseModel): """可分配用户响应(用于任务分配)""" id: str = Field(..., description="用户ID") username: str = Field(..., description="用户名") email: str = Field(..., description="邮箱") current_task_count: int = Field(default=0, description="当前任务数") completed_task_count: int = Field(default=0, description="已完成任务数") class UserListResponse(BaseModel): """用户列表响应""" users: List[UserWithStatsResponse] = Field(..., description="用户列表") total: int = Field(..., description="总数") class UserStatsResponse(BaseModel): """用户详细统计响应""" user: UserResponse = Field(..., description="用户信息") task_stats: TaskStats = Field(..., description="任务统计") recent_tasks: List[dict] = Field(default_factory=list, description="最近任务")