""" 用户模型 """ from sqlalchemy import Column, Integer, String, BigInteger, Enum, DateTime, Text, func, DECIMAL from sqlalchemy.dialects.mysql import TINYINT from enum import Enum as PyEnum from .base import Base class UserRole(PyEnum): """用户角色""" USER = "USER" STREAMER = "STREAMER" ADMIN = "ADMIN" class UserStatus(PyEnum): """用户状态""" ACTIVE = "ACTIVE" DISABLED = "DISABLED" BANNED = "BANNED" class User(Base): """用户表""" __tablename__ = "users" id = Column(Integer, primary_key=True, autoincrement=True, index=True) username = Column(String(50), unique=True, index=True, nullable=False, comment="用户名") email = Column(String(100), unique=True, index=True, nullable=False, comment="邮箱") hashed_password = Column(String(255), nullable=False, comment="哈希密码") role = Column(Enum(UserRole, native_enum=True), default=UserRole.USER, nullable=False, comment="用户角色") nickname = Column(String(64), comment="用户昵称") avatar_url = Column(String(255), comment="头像URL") phone = Column(String(20), comment="手机号") status = Column(Enum(UserStatus, native_enum=True), default=UserStatus.ACTIVE, comment="用户状态") balance = Column(BigInteger, default=0, comment="余额(分)") version = Column(Integer, default=0, comment="乐观锁版本号") last_login_at = Column(DateTime, comment="最后登录时间") login_count = Column(Integer, default=0, comment="登录次数") created_at = Column(DateTime, server_default=func.now(), comment="创建时间") updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间") is_active = Column(TINYINT, default=1, comment="是否激活(1:是 0:否)") class Transaction(Base): """交易流水表""" __tablename__ = "transactions" id = Column(Integer, primary_key=True, autoincrement=True, index=True) user_id = Column(Integer, nullable=False, index=True, comment="用户ID") type = Column(String(30), nullable=False, comment="交易类型") amount = Column(BigInteger, nullable=False, comment="金额(分)") balance_after = Column(BigInteger, nullable=False, comment="交易后余额") related_id = Column(Integer, comment="关联ID") description = Column(Text, comment="描述") created_at = Column(DateTime, server_default=func.now(), comment="创建时间")