from datetime import datetime from typing import Optional from pydantic import BaseModel, Field, field_validator class AdminUserOut(BaseModel): id: int phone: str name: str avatar: str = "" subject: str = "" school: str = "" grade: str = "" role: str = "teacher" is_active: bool = True credits: int = 0 created_at: datetime | None = None @field_validator("avatar", "subject", "school", "grade", "name", "role", mode="before") @classmethod def _none_to_empty(cls, v): return "" if v is None else v model_config = {"from_attributes": True} class AdminUserUpdate(BaseModel): role: Optional[str] = None is_active: Optional[bool] = None name: Optional[str] = None class AdminGrantCredits(BaseModel): amount: int = Field(..., gt=0, le=10000, description="积分数量") class AdminDashboardOut(BaseModel): total_users: int = 0 active_users: int = 0 admin_users: int = 0 total_resources: int = 0 public_resources: int = 0 total_coursewares: int = 0 total_animations: int = 0 total_exercises: int = 0 total_lesson_plans: int = 0 total_exams: int = 0 total_views: int = 0 total_downloads: int = 0 total_favorites: int = 0 total_credits_used: int = 0 new_users_today: int = 0