Files
huihuiSquare/backend/app/schemas/virtual_user.py
yuqianqian10204095yu cebc0a288f 1.0.0初始化源代码
2026-03-23 15:40:36 +08:00

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 人格描述")