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
|
|
|
|
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),
|
|
)
|