SurfSense/surfsense_backend/app/automations/persistence/models/automation.py
CREDO23 d948b769ba refactor(db): rename search_space to workspace in satellite ORM models (Phase 2 Wave B)
Flip search_space_id -> workspace_id and the workspace relationship/back_populates
in the automations, file_storage, notifications, and podcasts persistence models,
and drop the Phase 1 Column("workspace_id", ...) shim. Full SQLAlchemy mapper
configuration now passes (db.py + satellites consistent).
2026-06-26 18:20:28 +02:00

81 lines
2 KiB
Python

"""``automations`` table — editable, versioned automation definition."""
from __future__ import annotations
from datetime import UTC, datetime
from sqlalchemy import (
TIMESTAMP,
Column,
Enum as SQLAlchemyEnum,
ForeignKey,
Integer,
String,
Text,
)
from sqlalchemy.dialects.postgresql import JSONB, UUID
from sqlalchemy.orm import relationship
from app.db import BaseModel, TimestampMixin
from ..enums.automation_status import AutomationStatus
class Automation(BaseModel, TimestampMixin):
__tablename__ = "automations"
workspace_id = Column(
Integer,
ForeignKey("workspaces.id", ondelete="CASCADE"),
nullable=False,
index=True,
)
created_by_user_id = Column(
UUID(as_uuid=True),
ForeignKey("user.id", ondelete="SET NULL"),
nullable=True,
index=True,
)
name = Column(String(200), nullable=False)
description = Column(Text, nullable=True)
status = Column(
SQLAlchemyEnum(
AutomationStatus,
name="automation_status",
values_callable=lambda x: [e.value for e in x],
),
nullable=False,
default=AutomationStatus.ACTIVE,
server_default=AutomationStatus.ACTIVE.value,
index=True,
)
definition = Column(JSONB, nullable=False)
version = Column(Integer, nullable=False, default=1, server_default="1")
updated_at = Column(
TIMESTAMP(timezone=True),
nullable=False,
default=lambda: datetime.now(UTC),
onupdate=lambda: datetime.now(UTC),
index=True,
)
workspace = relationship("Workspace", back_populates="automations")
created_by = relationship("User", back_populates="automations")
triggers = relationship(
"AutomationTrigger",
back_populates="automation",
cascade="all, delete-orphan",
passive_deletes=True,
)
runs = relationship(
"AutomationRun",
back_populates="automation",
cascade="all, delete-orphan",
passive_deletes=True,
)