66 lines
1.9 KiB
Python
66 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 = auto()
|
|
ADMIN = auto()
|
|
EDITOR = auto()
|
|
VIEWER = auto()
|
|
|
|
|
|
class AccountStatus(str, Enum):
|
|
ACTIVE = auto()
|
|
DISABLED = auto()
|
|
BLOCKED = auto()
|
|
DELETED = auto()
|
|
|
|
|
|
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 = auto()
|
|
ACCESS_TOKEN = auto()
|
|
REFRESH_TOKEN = auto()
|
|
API_KEY = auto()
|
|
|
|
|
|
class KeyStatus(str, Enum):
|
|
ACTIVE = auto()
|
|
EXPIRED = auto()
|
|
DELETED = auto()
|
|
|
|
|
|
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),
|
|
)
|