107 lines
3.2 KiB
Python
107 lines
3.2 KiB
Python
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"),
|
|
)
|