You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
3.6 KiB

# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : user.py
# @Software : VSCode
# @Datetime : 2021/11/04 21:33:10
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
用户模型
"""
from datetime import datetime
from sqlalchemy import Column, Integer, VARCHAR, SmallInteger, DateTime, ForeignKey, Table
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from db.base_class import Base, gen_uuid
user_role = Table(
"nlt_userrole",
Base.metadata,
Column("id", Integer, unique=True, index=True, primary_key=True, autoincrement=True, comment="ID"),
Column("user_id", VARCHAR(32), ForeignKey("nlt_user.user_id"), nullable=False, primary_key=True, comment="用户id"),
Column("role_id", VARCHAR(32), ForeignKey("nlt_role.role_id"), nullable=False, primary_key=True, comment="角色id"),
Column("create_time", DateTime, default=datetime.now, server_default=func.now(), comment="创建时间")
)
class User(Base):
"""
用户表
"""
__tablename__ = "nlt_user"
user_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="用户id")
username = Column(VARCHAR(128), nullable=False, unique=True, comment="用户名(不可更改)")
hashed_password = Column(VARCHAR(128), nullable=False, comment="密码")
nickname = Column(VARCHAR(128), comment="用户昵称(显示用可更改)")
email = Column(VARCHAR(128), unique=True, comment="邮箱")
avatar = Column(VARCHAR(256), nullable=True, comment="用户头像")
phone = Column(VARCHAR(16), unique=True, index=True, nullable=True, comment="手机号")
gender = Column(SmallInteger, default=0, comment="性别 0=未知 1=男 2=女", server_default="0")
register_time = Column(DateTime, default=datetime.now, comment="注册事件")
last_login_time = Column(DateTime, default=datetime.now, comment="上次登录时间")
last_login_ip = Column(VARCHAR(64), nullable=True, comment="上次登录IP")
register_ip = Column(VARCHAR(64), nullable=True, comment="注册IP")
wechat_openid = Column(VARCHAR(64), nullable=True, comment="微信openId")
country = Column(VARCHAR(64), nullable=True, comment="国家")
province = Column(VARCHAR(64), nullable=True, comment="")
city = Column(VARCHAR(64), nullable=True, comment="")
q_limit_day = Column(Integer, default=0, comment="每日问题数量限制")
tokens_limit = Column(Integer, default=0, comment="字数限制")
# role_id = Column(Integer, comment="角色")
# role = relationship("Role", secondary=user_role)
is_active = Column(Integer, default=True, comment="用户是否激活 0=未激活 1=激活", server_default="1")
__table_args__ = ({'comment': '用户表'})
class Role(Base):
"""
角色表
"""
__tablename__ = "nlt_role"
role_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="角色id")
name = Column(VARCHAR(128), nullable=False, comment="角色名")
title = Column(VARCHAR(128), comment="角色名(中文)")
users = relationship("User", backref="roles", secondary=user_role)
# menu = relationship("Menu", secondary=menu.role_menu)
__table_args__ = ({'comment': '角色表'})
class LoginHistory(Base):
"""
登录记录
"""
__tablename__ = "nlt_login_history"
user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id'))
username = Column(VARCHAR(128), comment="用户名")
login_time = Column(DateTime, default=datetime.now, comment="登录时间")
login_ipv4 = Column(VARCHAR(15), comment="登录ip")
user = relationship("User", backref="login_histories")