""" Statistics schemas for request/response validation. Defines Pydantic models for project and user statistics. """ from pydantic import BaseModel, Field from typing import List, Optional from datetime import datetime class UserTaskStats(BaseModel): """用户任务统计""" user_id: str = Field(..., description="用户ID") username: str = Field(..., description="用户名") assigned_tasks: int = Field(default=0, description="已分配任务数") completed_tasks: int = Field(default=0, description="已完成任务数") in_progress_tasks: int = Field(default=0, description="进行中任务数") pending_tasks: int = Field(default=0, description="待处理任务数") annotation_count: int = Field(default=0, description="标注数据条数") completion_rate: float = Field(default=0.0, description="完成率 (%)") class ProjectStatisticsResponse(BaseModel): """项目统计响应""" project_id: str = Field(..., description="项目ID") project_name: str = Field(..., description="项目名称") # 任务统计 total_tasks: int = Field(default=0, description="总任务数") completed_tasks: int = Field(default=0, description="已完成任务数") in_progress_tasks: int = Field(default=0, description="进行中任务数") pending_tasks: int = Field(default=0, description="待处理任务数") # 数据统计 total_items: int = Field(default=0, description="总数据条数") annotated_items: int = Field(default=0, description="已标注数据条数") # 进度 task_completion_rate: float = Field(default=0.0, description="任务完成率 (%)") data_completion_rate: float = Field(default=0.0, description="数据标注完成率 (%)") # 人员统计 user_stats: List[UserTaskStats] = Field(default_factory=list, description="人员统计列表") class OverviewStatisticsResponse(BaseModel): """平台总览统计响应""" # 项目统计 total_projects: int = Field(default=0, description="总项目数") # 任务统计 total_tasks: int = Field(default=0, description="总任务数") completed_tasks: int = Field(default=0, description="已完成任务数") in_progress_tasks: int = Field(default=0, description="进行中任务数") pending_tasks: int = Field(default=0, description="待处理任务数") # 用户统计 total_users: int = Field(default=0, description="总用户数") admin_count: int = Field(default=0, description="管理员数") annotator_count: int = Field(default=0, description="标注人员数") # 标注统计 total_annotations: int = Field(default=0, description="总标注数") # 进度 overall_completion_rate: float = Field(default=0.0, description="整体完成率 (%)")