""" 主播相关模型 """ from sqlalchemy import Column, Integer, String, BigInteger, Enum, DateTime, Text, DECIMAL, ForeignKey, func from sqlalchemy.dialects.mysql import TINYINT from enum import Enum as PyEnum from .base import Base class StreamerStatus(PyEnum): """主播状态""" ACTIVE = "ACTIVE" SUSPENDED = "SUSPENDED" BANNED = "BANNED" class StreamerProfile(Base): """主播配置表""" __tablename__ = "streamer_profiles" id = Column(Integer, primary_key=True, autoincrement=True, index=True) user_id = Column(Integer, unique=True, nullable=False, comment="用户ID") display_name = Column(String(64), comment="主播展示名称") avatar_url = Column(String(255), comment="主播头像") bio = Column(Text, comment="主播简介") commission_rate = Column(DECIMAL(5, 2), default=5.00, comment="主播抽成比例(%)") max_active_chests = Column(Integer, default=10, comment="最大活跃宝箱数") total_chests = Column(Integer, default=0, comment="历史宝箱总数") total_winnings = Column(DECIMAL(15, 2), default=0.00, comment="历史获奖总额(分)") status = Column(Enum(StreamerStatus, native_enum=True), default=StreamerStatus.ACTIVE, comment="主播状态") created_at = Column(DateTime, server_default=func.now(), comment="创建时间") updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间") # 外键关系 # user = relationship("User", back_populates="streamer_profile", uselist=False) class UserOperationLog(Base): """用户操作日志表""" __tablename__ = "user_operation_logs" id = Column(Integer, primary_key=True, autoincrement=True, index=True) user_id = Column(Integer, nullable=False, comment="操作用户ID") operator_id = Column(Integer, comment="操作人ID(管理员)") operation_type = Column(String(64), nullable=False, comment="操作类型") operation_details = Column(Text, comment="操作详情(JSON格式)") ip_address = Column(String(45), comment="IP地址") created_at = Column(DateTime, server_default=func.now(), comment="创建时间")