An ebook/comic library service and web client
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.
 
 
 
 

50 lines
1.9 KiB

"""User related SQLALchemy models."""
from sqlalchemy import Enum
from atheneum.db import db
from atheneum.service.role_service import Role
class User(db.Model): # pylint: disable=too-few-public-methods
"""Represents a user in the system."""
__tablename__ = 'user'
ROLE_USER = 'USER'
ROLE_ADMIN = 'ADMIN'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(60), unique=True, nullable=False)
role = db.Column(
'role',
Enum(Role),
nullable=False,
default=Role.USER, )
password_hash = db.Column('password_hash', db.Unicode(128), nullable=False)
password_revision = db.Column(
'password_revision', db.SmallInteger, default=0, nullable=False)
creation_time = db.Column('creation_time', db.DateTime, nullable=False)
last_login_time = db.Column('last_login_time', db.DateTime)
version = db.Column('version', db.Integer, default=1, nullable=False)
class UserToken(db.Model): # pylint: disable=too-few-public-methods
"""Represents a token used alongside a user to authenticate operations."""
__tablename__ = 'user_token'
user_token_id = db.Column('id', db.Integer, primary_key=True)
user_id = db.Column(
'user_id',
db.Integer,
db.ForeignKey('user.id', ondelete='CASCADE'),
nullable=False,
index=True)
token = db.Column('token', db.Unicode(36), nullable=False)
note = db.Column('note', db.Unicode(128), nullable=True)
enabled = db.Column('enabled', db.Boolean, nullable=False, default=True)
expiration_time = db.Column('expiration_time', db.DateTime, nullable=True)
creation_time = db.Column('creation_time', db.DateTime, nullable=False)
last_edit_time = db.Column('last_edit_time', db.DateTime)
last_usage_time = db.Column('last_usage_time', db.DateTime)
version = db.Column('version', db.Integer, default=1, nullable=False)