From 16f4d007e493a9ab08b63408c9fddbd99a3a4bd2 Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Tue, 31 Mar 2026 16:27:04 +0200 Subject: [PATCH] Add system_prompt_slug column and migration for prompt overrides --- .../113_add_system_prompt_slug_to_prompts.py | 36 +++++++++++++++++++ surfsense_backend/app/db.py | 8 +++++ 2 files changed, 44 insertions(+) create mode 100644 surfsense_backend/alembic/versions/113_add_system_prompt_slug_to_prompts.py diff --git a/surfsense_backend/alembic/versions/113_add_system_prompt_slug_to_prompts.py b/surfsense_backend/alembic/versions/113_add_system_prompt_slug_to_prompts.py new file mode 100644 index 000000000..7bc00ca5b --- /dev/null +++ b/surfsense_backend/alembic/versions/113_add_system_prompt_slug_to_prompts.py @@ -0,0 +1,36 @@ +"""add system_prompt_slug to prompts + +Revision ID: 113 +Revises: 112 +""" + +from collections.abc import Sequence + +from alembic import op + +revision: str = "113" +down_revision: str | None = "112" +branch_labels: str | Sequence[str] | None = None +depends_on: str | Sequence[str] | None = None + + +def upgrade() -> None: + op.execute( + "ALTER TABLE prompts ADD COLUMN IF NOT EXISTS system_prompt_slug VARCHAR(100)" + ) + op.execute( + "CREATE INDEX IF NOT EXISTS ix_prompts_system_prompt_slug" + " ON prompts (system_prompt_slug)" + ) + op.execute( + "ALTER TABLE prompts ADD CONSTRAINT uq_prompt_user_system_slug" + " UNIQUE (user_id, system_prompt_slug)" + ) + + +def downgrade() -> None: + op.execute( + "ALTER TABLE prompts DROP CONSTRAINT IF EXISTS uq_prompt_user_system_slug" + ) + op.execute("DROP INDEX IF EXISTS ix_prompts_system_prompt_slug") + op.execute("ALTER TABLE prompts DROP COLUMN IF EXISTS system_prompt_slug") diff --git a/surfsense_backend/app/db.py b/surfsense_backend/app/db.py index 17d2df996..24675d472 100644 --- a/surfsense_backend/app/db.py +++ b/surfsense_backend/app/db.py @@ -1782,6 +1782,13 @@ class PromptMode(StrEnum): class Prompt(BaseModel, TimestampMixin): __tablename__ = "prompts" + __table_args__ = ( + UniqueConstraint( + "user_id", + "system_prompt_slug", + name="uq_prompt_user_system_slug", + ), + ) user_id = Column( UUID(as_uuid=True), @@ -1795,6 +1802,7 @@ class Prompt(BaseModel, TimestampMixin): nullable=True, index=True, ) + system_prompt_slug = Column(String(100), nullable=True, index=True) name = Column(String(200), nullable=False) prompt = Column(Text, nullable=False) mode = Column(SQLAlchemyEnum(PromptMode), nullable=False)