""" 虚拟用户相关 Schema """ from pydantic import BaseModel, Field from typing import Optional, List, Dict, Any from datetime import datetime from enum import Enum class ActivityLevel(str, Enum): """活跃度枚举""" LOW = "low" MEDIUM = "medium" HIGH = "high" class UserStatus(str, Enum): """用户状态枚举""" ACTIVE = "active" DISABLED = "disabled" class VirtualUserBase(BaseModel): """虚拟用户基础 Schema""" nickname: str = Field(..., description="昵称", min_length=1, max_length=100) username: str = Field(..., description="用户名(账号)", min_length=1, max_length=100) password: str = Field(..., description="密码", min_length=1) avatar_url: Optional[str] = Field(None, description="头像 URL", max_length=500) writing_style: Optional[str] = Field(None, description="写作风格", max_length=50) activity_level: ActivityLevel = Field(default=ActivityLevel.MEDIUM, description="活跃度") persona_description: Optional[str] = Field(None, description="人格描述") class VirtualUserCreate(VirtualUserBase): """创建虚拟用户请求""" pass class VirtualUserUpdate(BaseModel): """更新虚拟用户请求""" nickname: Optional[str] = Field(None, description="昵称", min_length=1, max_length=100) password: Optional[str] = Field(None, description="密码", min_length=1) avatar_url: Optional[str] = Field(None, description="头像 URL", max_length=500) writing_style: Optional[str] = Field(None, description="写作风格", max_length=50) activity_level: Optional[ActivityLevel] = Field(None, description="活跃度") persona_description: Optional[str] = Field(None, description="人格描述") status: Optional[UserStatus] = Field(None, description="状态") class VirtualUserResponse(VirtualUserBase): """虚拟用户响应""" id: int status: UserStatus is_logged_in: bool total_interactions: int today_comments: int today_replies: int last_interaction_time: Optional[datetime] created_at: datetime updated_at: datetime class Config: from_attributes = True class VirtualUserListResponse(BaseModel): """虚拟用户列表响应""" total: int items: List[VirtualUserResponse] class VirtualUserGenerateRequest(BaseModel): """生成虚拟用户请求""" count: int = Field(1, description="生成数量", ge=1, le=100) writing_styles: Optional[List[str]] = Field(None, description="写作风格列表") activity_levels: Optional[List[ActivityLevel]] = Field( [ActivityLevel.LOW, ActivityLevel.MEDIUM, ActivityLevel.HIGH], description="活跃度级别列表" ) generate_persona: bool = Field(True, description="是否生成 AI 人格描述") class VirtualUserImportRequest(BaseModel): """导入虚拟用户请求""" users: List[Dict[str, Any]] = Field(..., description="用户数据列表") generate_persona: bool = Field(True, description="是否为导入的用户生成 AI 人格描述")