64 lines
1.9 KiB
Python
64 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),
|
|
)
|