""" 虚拟用户模型 """ from sqlalchemy import Column, Integer, String, DateTime, Boolean, Enum, Text, JSON, Float from sqlalchemy.sql import func from enum import Enum as PyEnum import enum from .base import Base class ActivityLevel(str, enum.Enum): """活跃度枚举""" LOW = "low" # 低:每日 1-2 次 MEDIUM = "medium" # 中:每日 2-5 次 HIGH = "high" # 高:每日 5-10 次 class UserStatus(str, enum.Enum): """用户状态枚举""" ACTIVE = "active" # 启用 DISABLED = "disabled" # 禁用 class VirtualUser(Base): """虚拟用户表""" __tablename__ = "virtual_users" id = Column(Integer, primary_key=True, autoincrement=True, comment="用户 ID") # 基本信息 username = Column(String(100), unique=True, nullable=False, index=True, comment="用户名(账号)") password = Column(String(200), nullable=False, comment="密码(加密存储)") nickname = Column(String(100), nullable=False, comment="昵称") avatar_url = Column(String(500), comment="头像 URL") # 人格特征 writing_style = Column(String(50), comment="写作风格") activity_level = Column(Enum(ActivityLevel), default=ActivityLevel.MEDIUM, comment="活跃度") persona_description = Column(Text, comment="人格描述(AI 生成)") # 状态控制 status = Column(Enum(UserStatus), default=UserStatus.ACTIVE, comment="状态") is_logged_in = Column(Boolean, default=False, comment="是否已登录") session_token = Column(String(500), comment="会话 Token(登录后)") token_expire_time = Column(DateTime, comment="Token 过期时间") # 互动统计 total_interactions = Column(Integer, default=0, comment="总互动次数") today_comments = Column(Integer, default=0, comment="今日评论数") today_replies = Column(Integer, default=0, comment="今日回复数") last_interaction_time = Column(DateTime, comment="最后互动时间") # 扩展信息 extra_info = Column(JSON, default=dict, comment="扩展信息") # 时间戳 created_at = Column(DateTime, server_default=func.now(), comment="创建时间") updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间") def __repr__(self): return f"" class VirtualUserPersona(Base): """虚拟用户人格模板表""" __tablename__ = "virtual_user_personas" id = Column(Integer, primary_key=True, autoincrement=True, comment="ID") # 人格特征 name = Column(String(100), unique=True, nullable=False, comment="人格名称") description = Column(Text, comment="人格描述") # 风格配置 writing_styles = Column(JSON, comment="写作风格列表") personality_traits = Column(JSON, comment="性格特征列表") speech_patterns = Column(JSON, comment="说话模式列表") # AI 提示词 system_prompt = Column(Text, comment="系统提示词(用于 AI 生成)") # 状态 is_active = Column(Boolean, default=True, comment="是否启用") # 时间戳 created_at = Column(DateTime, server_default=func.now(), comment="创建时间") updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间") def __repr__(self): return f""