47 lines
2.3 KiB
Python
47 lines
2.3 KiB
Python
|
|
"""
|
|||
|
|
用户数据模型 - 存储用户基本信息
|
|||
|
|
"""
|
|||
|
|
from sqlalchemy import Column, String, Integer, Boolean, DateTime
|
|||
|
|
from sqlalchemy.sql import func
|
|||
|
|
from app.database import Base
|
|||
|
|
|
|||
|
|
|
|||
|
|
class User(Base):
|
|||
|
|
"""用户模型 - 存储OAuth和本地用户信息"""
|
|||
|
|
__tablename__ = "users"
|
|||
|
|
|
|||
|
|
user_id = Column(String(100), primary_key=True, index=True, comment="用户ID,格式:linuxdo_{id} 或 local_{id}")
|
|||
|
|
username = Column(String(100), nullable=False, index=True, comment="用户名")
|
|||
|
|
display_name = Column(String(200), nullable=False, comment="显示名称")
|
|||
|
|
avatar_url = Column(String(500), nullable=True, comment="头像URL")
|
|||
|
|
trust_level = Column(Integer, default=0, comment="信任等级(仅用于显示)")
|
|||
|
|
is_admin = Column(Boolean, default=False, comment="是否为管理员")
|
|||
|
|
linuxdo_id = Column(String(100), nullable=False, unique=True, index=True, comment="LinuxDO用户ID或本地用户ID")
|
|||
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now(), comment="创建时间")
|
|||
|
|
last_login = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), comment="最后登录时间")
|
|||
|
|
|
|||
|
|
def to_dict(self):
|
|||
|
|
"""转换为字典"""
|
|||
|
|
return {
|
|||
|
|
"user_id": self.user_id,
|
|||
|
|
"username": self.username,
|
|||
|
|
"display_name": self.display_name,
|
|||
|
|
"avatar_url": self.avatar_url,
|
|||
|
|
"trust_level": self.trust_level,
|
|||
|
|
"is_admin": self.is_admin,
|
|||
|
|
"linuxdo_id": self.linuxdo_id,
|
|||
|
|
"created_at": self.created_at.isoformat() if self.created_at else None,
|
|||
|
|
"last_login": self.last_login.isoformat() if self.last_login else None,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class UserPassword(Base):
|
|||
|
|
"""用户密码模型 - 存储用户密码信息"""
|
|||
|
|
__tablename__ = "user_passwords"
|
|||
|
|
|
|||
|
|
user_id = Column(String(100), primary_key=True, index=True, comment="用户ID")
|
|||
|
|
username = Column(String(100), nullable=False, comment="用户名")
|
|||
|
|
password_hash = Column(String(64), nullable=False, comment="密码哈希(SHA256)")
|
|||
|
|
has_custom_password = Column(Boolean, default=False, comment="是否为自定义密码")
|
|||
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now(), comment="创建时间")
|
|||
|
|
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), comment="更新时间")
|