""" 后台管理系统数据统计模块数据传输对象定义 定义用户统计、业务统计、模型统计、仪表盘等相关API响应的数据结构 """ from datetime import date from decimal import Decimal from typing import List from pydantic import BaseModel, Field # ==================== 用户统计相关 Schema ==================== class UserOverviewResponse(BaseModel): """用户统计概览响应""" new_users: int = Field(..., description="新增用户数") total_users: int = Field(..., description="总用户数") active_users: int = Field(..., description="活跃用户数") retention_rate: float = Field(..., description="留存率(%)") class UserGrowthItem(BaseModel): """用户增长趋势项""" date: str = Field(..., description="日期") new_users: int = Field(..., description="新增用户数") active_users: int = Field(..., description="活跃用户数") class UserDistributionResponse(BaseModel): """用户分布统计响应""" pass # ==================== 业务统计相关 Schema ==================== class BusinessOverviewResponse(BaseModel): """业务统计概览响应""" conversation_count: int = Field(..., description="对话次数") picture_count: int = Field(..., description="图片生成次数") audio_count: int = Field(..., description="音频合成次数") video_count: int = Field(..., description="视频生成次数") class BusinessTrendItem(BaseModel): """业务趋势项""" date: str = Field(..., description="日期") conversation_count: int = Field(..., description="对话次数") picture_count: int = Field(..., description="图片次数") audio_count: int = Field(..., description="音频次数") video_count: int = Field(..., description="视频次数") # ==================== 模型统计相关 Schema ==================== class ModelRankingItem(BaseModel): """模型排行项""" model_name: str = Field(..., description="模型名称") usage_count: int = Field(..., description="使用次数") percentage: float = Field(..., description="占比(%)") # ==================== 仪表盘相关 Schema ==================== class DashboardMetricsResponse(BaseModel): """仪表盘核心指标响应""" today_new_users: int = Field(..., description="今日新增用户") today_new_users_growth: float = Field(..., description="相比昨日增长率(%)") total_users: int = Field(..., description="总用户数") active_users: int = Field(..., description="活跃用户数(近7日)") today_api_calls: int = Field(..., description="今日API调用量")