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="创建时间")
|