60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
from sqlalchemy import Table, Column, String, Enum as SQLAEnum, JSON, ForeignKey, DateTime, Index
|
|
from sqlalchemy.sql import func
|
|
|
|
from enum import Enum, auto
|
|
|
|
from api.db.sql_types import UnsignedInt
|
|
from api.db import metadata
|
|
|
|
|
|
class AccountRole(str,Enum):
|
|
OWNER = 'OWNER'
|
|
ADMIN = 'ADMIN'
|
|
EDITOR = 'EDITOR'
|
|
VIEWER = 'VIEWER'
|
|
|
|
class AccountStatus(str,Enum):
|
|
ACTIVE = 'ACTIVE'
|
|
DISABLED = 'DISABLED'
|
|
BLOCKED = 'BLOCKED'
|
|
DELETED = 'DELETED'
|
|
|
|
|
|
account_table = Table(
|
|
'account', metadata,
|
|
Column('id', UnsignedInt, primary_key=True, autoincrement=True),
|
|
Column('name', String(100), nullable=False),
|
|
Column('login', String(100), nullable=False),
|
|
Column('email', String(100), nullable=True),
|
|
Column('bind_tenant_id', String(40), nullable=True),
|
|
Column('role', SQLAEnum(AccountRole), nullable=False),
|
|
Column('meta', JSON, default={}),
|
|
Column('creator_id', UnsignedInt, ForeignKey('account.id'), nullable=True),
|
|
Column('created_at', DateTime(timezone=True), server_default=func.now()),
|
|
Column('status', SQLAEnum(AccountStatus), nullable=False),
|
|
|
|
Index('idx_login', 'login'),
|
|
Index('idx_name', 'name'),
|
|
)
|
|
|
|
class KeyType(str,Enum):
|
|
PASSWORD = "PASSWORD"
|
|
ACCESS_TOKEN = "ACCESS_TOKEN"
|
|
REFRESH_TOKEN = "REFRESH_TOKEN"
|
|
API_KEY = "API_KEY"
|
|
|
|
class KeyStatus(str,Enum):
|
|
ACTIVE = "ACTIVE"
|
|
EXPIRED = "EXPIRED"
|
|
DELETED = "DELETED"
|
|
|
|
account_keyring_table = Table(
|
|
'account_keyring', metadata,
|
|
Column('owner_id', UnsignedInt, ForeignKey('account.id'), primary_key=True, nullable=False),
|
|
Column('key_type', SQLAEnum(KeyType), primary_key=True, nullable=False),
|
|
Column('key_id', String(40),primary_key=True, default=None),
|
|
Column('key_value', String(255), nullable=False),
|
|
Column('created_at', DateTime(timezone=True), server_default=func.now()),
|
|
Column('expiry', DateTime(timezone=True), nullable=True),
|
|
Column('status', SQLAEnum(KeyStatus), nullable=False), )
|