feat(orm): move tables to core
This commit is contained in:
7
orm/__init__.py
Normal file
7
orm/__init__.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from sqlalchemy import MetaData
|
||||
|
||||
metadata = MetaData()
|
||||
|
||||
__all__ = [
|
||||
"metadata",
|
||||
]
|
6
orm/sql_types.py
Normal file
6
orm/sql_types.py
Normal file
@@ -0,0 +1,6 @@
|
||||
__all__ = ["UnsignedInt"]
|
||||
|
||||
from sqlalchemy import Integer
|
||||
from sqlalchemy.dialects import mysql
|
||||
|
||||
UnsignedInt = Integer().with_variant(mysql.INTEGER(unsigned=True), "mysql")
|
1
orm/tables/__init__.py
Normal file
1
orm/tables/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import account, events, process
|
65
orm/tables/account.py
Normal file
65
orm/tables/account.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import enum
|
||||
|
||||
from sqlalchemy import Column, DateTime, Enum as SQLAEnum, ForeignKey, Index, JSON, String, Table
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from orm import metadata
|
||||
from orm.sql_types import UnsignedInt
|
||||
|
||||
|
||||
class AccountRole(enum.StrEnum):
|
||||
OWNER = "OWNER"
|
||||
ADMIN = "ADMIN"
|
||||
EDITOR = "EDITOR"
|
||||
VIEWER = "VIEWER"
|
||||
|
||||
|
||||
class AccountStatus(enum.StrEnum):
|
||||
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(enum.StrEnum):
|
||||
PASSWORD = "PASSWORD"
|
||||
ACCESS_TOKEN = "ACCESS_TOKEN"
|
||||
REFRESH_TOKEN = "REFRESH_TOKEN"
|
||||
API_KEY = "API_KEY"
|
||||
|
||||
|
||||
class KeyStatus(enum.StrEnum):
|
||||
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(512), 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),
|
||||
)
|
32
orm/tables/events.py
Normal file
32
orm/tables/events.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import enum
|
||||
|
||||
from sqlalchemy import Column, DateTime, Enum as SQLAEnum, ForeignKey, JSON, String, Table
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from orm import metadata
|
||||
from orm.sql_types import UnsignedInt
|
||||
|
||||
|
||||
class EventState(enum.StrEnum):
|
||||
AUTO = "AUTO"
|
||||
DESCRIPTED = "DESCRIPTED"
|
||||
|
||||
|
||||
class EventStatus(enum.StrEnum):
|
||||
ACTIVE = "ACTIVE"
|
||||
DISABLED = "DISABLED"
|
||||
DELETED = "DELETED"
|
||||
|
||||
|
||||
list_events_table = Table(
|
||||
"list_events",
|
||||
metadata,
|
||||
Column("id", UnsignedInt, primary_key=True, autoincrement=True),
|
||||
Column("name", String(40, collation="latin1_bin"), nullable=False, unique=True),
|
||||
Column("title", String(64), nullable=False),
|
||||
Column("creator_id", UnsignedInt, ForeignKey("account.id"), nullable=False),
|
||||
Column("created_at", DateTime(timezone=True), server_default=func.now()),
|
||||
Column("schema", JSON, default={}),
|
||||
Column("state", SQLAEnum(EventState), nullable=False),
|
||||
Column("status", SQLAEnum(EventStatus), nullable=False),
|
||||
)
|
106
orm/tables/process.py
Normal file
106
orm/tables/process.py
Normal file
@@ -0,0 +1,106 @@
|
||||
import enum
|
||||
from enum import Enum
|
||||
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
DateTime,
|
||||
Enum as SQLAEnum,
|
||||
ForeignKey,
|
||||
Index,
|
||||
JSON,
|
||||
PrimaryKeyConstraint,
|
||||
String,
|
||||
Table,
|
||||
Text,
|
||||
)
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from orm import metadata
|
||||
from orm.sql_types import UnsignedInt
|
||||
|
||||
|
||||
class ProcessStatus(enum.StrEnum):
|
||||
ACTIVE = "ACTIVE"
|
||||
STOPPING = "STOPPING"
|
||||
STOPPED = "STOPPED"
|
||||
DELETED = "DELETED"
|
||||
|
||||
|
||||
process_schema_table = Table(
|
||||
"process_schema",
|
||||
metadata,
|
||||
Column("id", UnsignedInt, primary_key=True, autoincrement=True),
|
||||
Column("title", String(100), nullable=False),
|
||||
Column("description", Text, nullable=False),
|
||||
Column("owner_id", UnsignedInt, ForeignKey("account.id"), nullable=False),
|
||||
Column("creator_id", UnsignedInt, ForeignKey("account.id"), nullable=False),
|
||||
Column("created_at", DateTime(timezone=True), server_default=func.now()),
|
||||
Column("settings", JSON, default={}),
|
||||
Column("status", SQLAEnum(ProcessStatus), nullable=False),
|
||||
Index(
|
||||
"idx_owner_id",
|
||||
"owner_id",
|
||||
),
|
||||
)
|
||||
|
||||
process_version_archive_table = Table(
|
||||
"process_version_archive",
|
||||
metadata,
|
||||
Column("id", UnsignedInt, autoincrement=True, nullable=False),
|
||||
Column("ps_id", UnsignedInt, ForeignKey("process_schema.id"), nullable=False),
|
||||
Column("version", UnsignedInt, default=1, nullable=False),
|
||||
Column("snapshot", JSON, default={}),
|
||||
Column("owner_id", UnsignedInt, ForeignKey("account.id"), nullable=False),
|
||||
Column("created_at", DateTime(timezone=True), server_default=func.now()),
|
||||
Column("is_last", UnsignedInt, default=0),
|
||||
PrimaryKeyConstraint("id", "version"),
|
||||
)
|
||||
|
||||
|
||||
class NodeStatus(enum.StrEnum):
|
||||
ACTIVE = "ACTIVE"
|
||||
DISABLED = "DISABLED"
|
||||
DELETED = "DELETED"
|
||||
|
||||
|
||||
class NodeType(Enum):
|
||||
TYPE1 = "Type1"
|
||||
TYPE2 = "Type2"
|
||||
TYPE3 = "Type3"
|
||||
|
||||
|
||||
ps_node_table = Table(
|
||||
"ps_node",
|
||||
metadata,
|
||||
Column("id", UnsignedInt, autoincrement=True, primary_key=True, nullable=False),
|
||||
Column("ps_id", UnsignedInt, ForeignKey("process_schema.id"), nullable=False),
|
||||
Column("node_type", SQLAEnum(NodeType), nullable=False),
|
||||
Column("settings", JSON, default={}),
|
||||
Column("creator_id", UnsignedInt, ForeignKey("account.id"), nullable=False),
|
||||
Column("created_at", DateTime(timezone=True), server_default=func.now()),
|
||||
Column("status", SQLAEnum(NodeStatus), nullable=False),
|
||||
Index("idx_ps_id", "ps_id"),
|
||||
)
|
||||
|
||||
|
||||
class NodeLinkStatus(enum.StrEnum):
|
||||
ACTIVE = "ACTIVE"
|
||||
STOPPING = "STOPPING"
|
||||
STOPPED = "STOPPED"
|
||||
DELETED = "DELETED"
|
||||
|
||||
|
||||
node_link_table = Table(
|
||||
"node_link",
|
||||
metadata,
|
||||
Column("id", UnsignedInt, autoincrement=True, primary_key=True, nullable=False),
|
||||
Column("link_name", String(20), nullable=False),
|
||||
Column("node_id", UnsignedInt, ForeignKey("ps_node.id"), nullable=False),
|
||||
Column("next_node_id", UnsignedInt, ForeignKey("ps_node.id"), nullable=False),
|
||||
Column("settings", JSON, default={}),
|
||||
Column("creator_id", UnsignedInt, ForeignKey("account.id"), nullable=False),
|
||||
Column("created_at", DateTime(timezone=True), server_default=func.now()),
|
||||
Column("status", SQLAEnum(NodeLinkStatus), nullable=False),
|
||||
Index("idx_node_id", "node_id"),
|
||||
Index("idx_next_node_id", "next_node_id"),
|
||||
)
|
Reference in New Issue
Block a user