50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
|
|
"""
|
|||
|
|
主播相关模型
|
|||
|
|
"""
|
|||
|
|
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="创建时间")
|