87 lines
3.0 KiB
Python
87 lines
3.0 KiB
Python
"""
|
|
虚拟用户相关 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 人格描述")
|