From ea85e408283a8647c950155f656d4a48d44134ec Mon Sep 17 00:00:00 2001 From: Sandra Zollner Date: Wed, 5 Aug 2026 12:11:52 +0200 Subject: [PATCH] feat(db): Add baselineVersionId to workflow_review_request_workflow (no-changelog) Persist the published baseline at approval time so closed reviews can keep a stable diff without a second migrations-review pass later. Co-authored-by: Cursor --- docs/generated/postgres-schema/README.md | 4 +- .../postgres-schema/public.workflow_entity.md | 1 + .../public.workflow_history.md | 2 + .../public.workflow_review_request.md | 1 + ...public.workflow_review_request_workflow.md | 30 +++++++------ docs/generated/sqlite-schema/README.md | 8 ++-- .../sqlite-schema/workflow_entity.md | 1 + .../sqlite-schema/workflow_history.md | 2 + .../sqlite-schema/workflow_review_request.md | 1 + .../workflow_review_request_workflow.md | 42 ++++++++++--------- .../workflow-review-request-workflow.ee.ts | 3 ++ ...ersionIdToWorkflowReviewRequestWorkflow.ts | 38 +++++++++++++++++ .../db/src/migrations/postgresdb/index.ts | 2 + .../@n8n/db/src/migrations/sqlite/index.ts | 2 + 14 files changed, 101 insertions(+), 36 deletions(-) create mode 100644 packages/@n8n/db/src/migrations/common/1785923614352-AddBaselineVersionIdToWorkflowReviewRequestWorkflow.ts diff --git a/docs/generated/postgres-schema/README.md b/docs/generated/postgres-schema/README.md index 13aa56c7d7c..e2140b77990 100644 --- a/docs/generated/postgres-schema/README.md +++ b/docs/generated/postgres-schema/README.md @@ -128,7 +128,7 @@ Auto-generated from the PostgreSQL migrations in @n8n/db. Do not edit by hand. | [public.workflow_review_request](public.workflow_review_request.md) | 12 | | BASE TABLE | | [public.workflow_review_request_authors](public.workflow_review_request_authors.md) | 2 | | BASE TABLE | | [public.workflow_review_request_reviewers](public.workflow_review_request_reviewers.md) | 2 | | BASE TABLE | -| [public.workflow_review_request_workflow](public.workflow_review_request_workflow.md) | 4 | | BASE TABLE | +| [public.workflow_review_request_workflow](public.workflow_review_request_workflow.md) | 5 | | BASE TABLE | | [public.workflow_statistics](public.workflow_statistics.md) | 7 | | BASE TABLE | | [public.workflow_statistics_delta](public.workflow_statistics_delta.md) | 6 | | BASE TABLE | | [public.workflows_tags](public.workflows_tags.md) | 2 | | BASE TABLE | @@ -327,6 +327,7 @@ erDiagram "public.workflow_review_request_reviewers" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE" "public.workflow_review_request_workflow" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE" "public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;workflowVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL" +"public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;baselineVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL" "public.workflow_review_request_workflow" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE" "public.workflows_tags" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE" "public.workflows_tags" }o--|| "public.tag_entity" : "FOREIGN KEY (#quot;tagId#quot;) REFERENCES tag_entity(id) ON DELETE CASCADE" @@ -1521,6 +1522,7 @@ erDiagram varchar_36_ workflowReviewRequestId FK } "public.workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/postgres-schema/public.workflow_entity.md b/docs/generated/postgres-schema/public.workflow_entity.md index b9fa3bd9d9d..5ae783320d9 100644 --- a/docs/generated/postgres-schema/public.workflow_entity.md +++ b/docs/generated/postgres-schema/public.workflow_entity.md @@ -302,6 +302,7 @@ erDiagram varchar_36_ workflowId FK } "public.workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/postgres-schema/public.workflow_history.md b/docs/generated/postgres-schema/public.workflow_history.md index 774a9911ea4..1f2f923735a 100644 --- a/docs/generated/postgres-schema/public.workflow_history.md +++ b/docs/generated/postgres-schema/public.workflow_history.md @@ -49,6 +49,7 @@ erDiagram "public.workflow_publish_history" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;versionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL" "public.workflow_published_version" }o--|| "public.workflow_history" : "FOREIGN KEY (#quot;publishedVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE RESTRICT" "public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;workflowVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL" +"public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;baselineVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL" "public.workflow_history" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE" "public.workflow_history" { @@ -111,6 +112,7 @@ erDiagram varchar_36_ workflowId FK } "public.workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/postgres-schema/public.workflow_review_request.md b/docs/generated/postgres-schema/public.workflow_review_request.md index 60c9752b739..14f6b040c99 100644 --- a/docs/generated/postgres-schema/public.workflow_review_request.md +++ b/docs/generated/postgres-schema/public.workflow_review_request.md @@ -96,6 +96,7 @@ erDiagram varchar_36_ workflowReviewRequestId FK } "public.workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/postgres-schema/public.workflow_review_request_workflow.md b/docs/generated/postgres-schema/public.workflow_review_request_workflow.md index f0b1f6e928b..d0b7c85da8a 100644 --- a/docs/generated/postgres-schema/public.workflow_review_request_workflow.md +++ b/docs/generated/postgres-schema/public.workflow_review_request_workflow.md @@ -4,6 +4,7 @@ | Name | Type | Default | Nullable | Children | Parents | Comment | | ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| baselineVersionId | varchar(36) | | true | | [public.workflow_history](public.workflow_history.md) | Published workflow_history version captured when the review was approved | | id | varchar(36) | | false | | | | | workflowId | varchar(36) | | false | | [public.workflow_entity](public.workflow_entity.md) | | | workflowReviewRequestId | varchar(36) | | false | | [public.workflow_review_request](public.workflow_review_request.md) | | @@ -16,6 +17,7 @@ | FK_0f6f0f2c6d46b806fee02962ac2 | FOREIGN KEY | FOREIGN KEY ("workflowVersionId") REFERENCES workflow_history("versionId") ON DELETE SET NULL | | FK_619f5b0544bcec60c3387e82f2f | FOREIGN KEY | FOREIGN KEY ("workflowId") REFERENCES workflow_entity(id) ON DELETE CASCADE | | FK_e44b652e6dc99ef1364a2d85504 | FOREIGN KEY | FOREIGN KEY ("workflowReviewRequestId") REFERENCES workflow_review_request(id) ON DELETE CASCADE | +| FK_ea1e6a42d305137f6eafad411cb | FOREIGN KEY | FOREIGN KEY ("baselineVersionId") REFERENCES workflow_history("versionId") ON DELETE SET NULL | | PK_be3bf4facb054cf2b2b116b3b9c | PRIMARY KEY | PRIMARY KEY (id) | | workflow_review_request_workfl_workflowReviewRequestId_not_null | n | NOT NULL "workflowReviewRequestId" | | workflow_review_request_workflow_id_not_null | n | NOT NULL id | @@ -34,16 +36,31 @@ ```mermaid erDiagram +"public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;baselineVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL" "public.workflow_review_request_workflow" }o--|| "public.workflow_entity" : "FOREIGN KEY (#quot;workflowId#quot;) REFERENCES workflow_entity(id) ON DELETE CASCADE" "public.workflow_review_request_workflow" }o--|| "public.workflow_review_request" : "FOREIGN KEY (#quot;workflowReviewRequestId#quot;) REFERENCES workflow_review_request(id) ON DELETE CASCADE" "public.workflow_review_request_workflow" }o--o| "public.workflow_history" : "FOREIGN KEY (#quot;workflowVersionId#quot;) REFERENCES workflow_history(#quot;versionId#quot;) ON DELETE SET NULL" "public.workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK varchar_36_ workflowVersionId FK } +"public.workflow_history" { + varchar_255_ authors + boolean autosaved + json connections + timestamp_3__with_time_zone createdAt + text description + varchar_128_ name + json nodeGroups + json nodes + timestamp_3__with_time_zone updatedAt + varchar_36_ versionId + varchar_36_ workflowId FK +} "public.workflow_entity" { boolean active varchar_36_ activeVersionId FK @@ -80,19 +97,6 @@ erDiagram timestamp_3__with_time_zone updatedAt uuid updatedById FK } -"public.workflow_history" { - varchar_255_ authors - boolean autosaved - json connections - timestamp_3__with_time_zone createdAt - text description - varchar_128_ name - json nodeGroups - json nodes - timestamp_3__with_time_zone updatedAt - varchar_36_ versionId - varchar_36_ workflowId FK -} ``` --- diff --git a/docs/generated/sqlite-schema/README.md b/docs/generated/sqlite-schema/README.md index 7182604a07c..99ef2afd27c 100644 --- a/docs/generated/sqlite-schema/README.md +++ b/docs/generated/sqlite-schema/README.md @@ -128,7 +128,7 @@ Auto-generated from the SQLite migrations in @n8n/db. Do not edit by hand. | [workflow_review_request](workflow_review_request.md) | 12 | | table | | [workflow_review_request_authors](workflow_review_request_authors.md) | 2 | | table | | [workflow_review_request_reviewers](workflow_review_request_reviewers.md) | 2 | | table | -| [workflow_review_request_workflow](workflow_review_request_workflow.md) | 4 | | table | +| [workflow_review_request_workflow](workflow_review_request_workflow.md) | 5 | | table | | [workflow_statistics](workflow_statistics.md) | 7 | | table | | [workflows_tags](workflows_tags.md) | 2 | | table | @@ -312,9 +312,10 @@ erDiagram "workflow_review_request_authors" |o--|| "workflow_review_request" : "FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" "workflow_review_request_reviewers" |o--|| "user" : "FOREIGN KEY (userId) REFERENCES user (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" "workflow_review_request_reviewers" |o--|| "workflow_review_request" : "FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" -"workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (workflowVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE" -"workflow_review_request_workflow" }o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" +"workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (baselineVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE" "workflow_review_request_workflow" }o--|| "workflow_review_request" : "FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" +"workflow_review_request_workflow" }o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" +"workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (workflowVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE" "workflows_tags" |o--|| "tag_entity" : "FOREIGN KEY (tagId) REFERENCES tag_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" "workflows_tags" |o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" @@ -1510,6 +1511,7 @@ erDiagram varchar_36_ workflowReviewRequestId PK } "workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id PK varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/sqlite-schema/workflow_entity.md b/docs/generated/sqlite-schema/workflow_entity.md index 472ff26bdf2..7ebf2decddf 100644 --- a/docs/generated/sqlite-schema/workflow_entity.md +++ b/docs/generated/sqlite-schema/workflow_entity.md @@ -293,6 +293,7 @@ erDiagram varchar_36_ workflowId PK } "workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id PK varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/sqlite-schema/workflow_history.md b/docs/generated/sqlite-schema/workflow_history.md index d1d9330bc2b..4784c7b4120 100644 --- a/docs/generated/sqlite-schema/workflow_history.md +++ b/docs/generated/sqlite-schema/workflow_history.md @@ -53,6 +53,7 @@ erDiagram "workflow_publish_history" }o--o| "workflow_history" : "FOREIGN KEY (versionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" "workflow_published_version" }o--|| "workflow_history" : "FOREIGN KEY (publishedVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE RESTRICT MATCH NONE" "workflow_published_version" }o--|| "workflow_history" : "FOREIGN KEY (publishedVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" +"workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (baselineVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE" "workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (workflowVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE" "workflow_history" }o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" @@ -116,6 +117,7 @@ erDiagram varchar_36_ workflowId PK } "workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id PK varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/sqlite-schema/workflow_review_request.md b/docs/generated/sqlite-schema/workflow_review_request.md index 5081f0f3ffe..cfb6458eae5 100644 --- a/docs/generated/sqlite-schema/workflow_review_request.md +++ b/docs/generated/sqlite-schema/workflow_review_request.md @@ -101,6 +101,7 @@ erDiagram varchar_36_ workflowReviewRequestId PK } "workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id PK varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK diff --git a/docs/generated/sqlite-schema/workflow_review_request_workflow.md b/docs/generated/sqlite-schema/workflow_review_request_workflow.md index bc043cfba0d..911963f28f9 100644 --- a/docs/generated/sqlite-schema/workflow_review_request_workflow.md +++ b/docs/generated/sqlite-schema/workflow_review_request_workflow.md @@ -6,7 +6,7 @@ Table Definition ```sql -CREATE TABLE "workflow_review_request_workflow" ("id" varchar(36) PRIMARY KEY NOT NULL, "workflowReviewRequestId" varchar(36) NOT NULL, "workflowId" varchar(36) NOT NULL, "workflowVersionId" varchar(36), CONSTRAINT "FK_e44b652e6dc99ef1364a2d85504" FOREIGN KEY ("workflowReviewRequestId") REFERENCES "workflow_review_request" ("id") ON DELETE CASCADE, CONSTRAINT "FK_619f5b0544bcec60c3387e82f2f" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE, CONSTRAINT "FK_0f6f0f2c6d46b806fee02962ac2" FOREIGN KEY ("workflowVersionId") REFERENCES "workflow_history" ("versionId") ON DELETE SET NULL) +CREATE TABLE "workflow_review_request_workflow" ("id" varchar(36) PRIMARY KEY NOT NULL, "workflowReviewRequestId" varchar(36) NOT NULL, "workflowId" varchar(36) NOT NULL, "workflowVersionId" varchar(36), "baselineVersionId" varchar(36), CONSTRAINT "FK_0f6f0f2c6d46b806fee02962ac2" FOREIGN KEY ("workflowVersionId") REFERENCES "workflow_history" ("versionId") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_619f5b0544bcec60c3387e82f2f" FOREIGN KEY ("workflowId") REFERENCES "workflow_entity" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_e44b652e6dc99ef1364a2d85504" FOREIGN KEY ("workflowReviewRequestId") REFERENCES "workflow_review_request" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_ea1e6a42d305137f6eafad411cb" FOREIGN KEY ("baselineVersionId") REFERENCES "workflow_history" ("versionId") ON DELETE SET NULL) ``` @@ -15,6 +15,7 @@ CREATE TABLE "workflow_review_request_workflow" ("id" varchar(36) PRIMARY KEY NO | Name | Type | Default | Nullable | Children | Parents | Comment | | ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| baselineVersionId | varchar(36) | | true | | [workflow_history](workflow_history.md) | | | id | varchar(36) | | false | | | | | workflowId | varchar(36) | | false | | [workflow_entity](workflow_entity.md) | | | workflowReviewRequestId | varchar(36) | | false | | [workflow_review_request](workflow_review_request.md) | | @@ -24,9 +25,10 @@ CREATE TABLE "workflow_review_request_workflow" ("id" varchar(36) PRIMARY KEY NO | Name | Type | Definition | | ---- | ---- | ---------- | -| - (Foreign key ID: 0) | FOREIGN KEY | FOREIGN KEY (workflowVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE | -| - (Foreign key ID: 1) | FOREIGN KEY | FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE | -| - (Foreign key ID: 2) | FOREIGN KEY | FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE | +| - (Foreign key ID: 0) | FOREIGN KEY | FOREIGN KEY (baselineVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE | +| - (Foreign key ID: 1) | FOREIGN KEY | FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE | +| - (Foreign key ID: 2) | FOREIGN KEY | FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE | +| - (Foreign key ID: 3) | FOREIGN KEY | FOREIGN KEY (workflowVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE | | id | PRIMARY KEY | PRIMARY KEY (id) | | sqlite_autoindex_workflow_review_request_workflow_1 | PRIMARY KEY | PRIMARY KEY (id) | @@ -34,8 +36,8 @@ CREATE TABLE "workflow_review_request_workflow" ("id" varchar(36) PRIMARY KEY NO | Name | Definition | | ---- | ---------- | -| IDX_workflow_review_request_workflow_workflow_request | CREATE INDEX "IDX_workflow_review_request_workflow_workflow_request"
ON "workflow_review_request_workflow"("workflowId", "workflowReviewRequestId") | -| UQ_workflow_review_request_workflow_request_workflow | CREATE UNIQUE INDEX "UQ_workflow_review_request_workflow_request_workflow"
ON "workflow_review_request_workflow"("workflowReviewRequestId", "workflowId") | +| IDX_workflow_review_request_workflow_workflow_request | CREATE INDEX "IDX_workflow_review_request_workflow_workflow_request" ON "workflow_review_request_workflow" ("workflowId", "workflowReviewRequestId") | +| UQ_workflow_review_request_workflow_request_workflow | CREATE UNIQUE INDEX "UQ_workflow_review_request_workflow_request_workflow" ON "workflow_review_request_workflow" ("workflowReviewRequestId", "workflowId") | | sqlite_autoindex_workflow_review_request_workflow_1 | PRIMARY KEY (id) | ## Relations @@ -43,16 +45,31 @@ CREATE TABLE "workflow_review_request_workflow" ("id" varchar(36) PRIMARY KEY NO ```mermaid erDiagram +"workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (baselineVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE" "workflow_review_request_workflow" }o--|| "workflow_entity" : "FOREIGN KEY (workflowId) REFERENCES workflow_entity (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" "workflow_review_request_workflow" }o--|| "workflow_review_request" : "FOREIGN KEY (workflowReviewRequestId) REFERENCES workflow_review_request (id) ON UPDATE NO ACTION ON DELETE CASCADE MATCH NONE" "workflow_review_request_workflow" }o--o| "workflow_history" : "FOREIGN KEY (workflowVersionId) REFERENCES workflow_history (versionId) ON UPDATE NO ACTION ON DELETE SET NULL MATCH NONE" "workflow_review_request_workflow" { + varchar_36_ baselineVersionId FK varchar_36_ id PK varchar_36_ workflowId FK varchar_36_ workflowReviewRequestId FK varchar_36_ workflowVersionId FK } +"workflow_history" { + varchar_255_ authors + boolean autosaved + TEXT connections + datetime_3_ createdAt + TEXT description + varchar_128_ name + TEXT nodeGroups + TEXT nodes + datetime_3_ updatedAt + varchar_36_ versionId PK + varchar_36_ workflowId FK +} "workflow_entity" { boolean active varchar_36_ activeVersionId FK @@ -89,19 +106,6 @@ erDiagram datetime_3_ updatedAt varchar updatedById FK } -"workflow_history" { - varchar_255_ authors - boolean autosaved - TEXT connections - datetime_3_ createdAt - TEXT description - varchar_128_ name - TEXT nodeGroups - TEXT nodes - datetime_3_ updatedAt - varchar_36_ versionId PK - varchar_36_ workflowId FK -} ``` --- diff --git a/packages/@n8n/db/src/entities/workflow-review-request-workflow.ee.ts b/packages/@n8n/db/src/entities/workflow-review-request-workflow.ee.ts index 93283153d8a..b558a0edc6c 100644 --- a/packages/@n8n/db/src/entities/workflow-review-request-workflow.ee.ts +++ b/packages/@n8n/db/src/entities/workflow-review-request-workflow.ee.ts @@ -20,4 +20,7 @@ export class WorkflowReviewRequestWorkflow extends WithStringId { @Column({ type: 'varchar', length: 36, nullable: true }) workflowVersionId: string | null; + + @Column({ type: 'varchar', length: 36, nullable: true }) + baselineVersionId: string | null; } diff --git a/packages/@n8n/db/src/migrations/common/1785923614352-AddBaselineVersionIdToWorkflowReviewRequestWorkflow.ts b/packages/@n8n/db/src/migrations/common/1785923614352-AddBaselineVersionIdToWorkflowReviewRequestWorkflow.ts new file mode 100644 index 00000000000..6c9b010ec14 --- /dev/null +++ b/packages/@n8n/db/src/migrations/common/1785923614352-AddBaselineVersionIdToWorkflowReviewRequestWorkflow.ts @@ -0,0 +1,38 @@ +import type { MigrationContext, ReversibleMigration } from '../migration-types'; + +const REVIEW_WORKFLOW_TABLE = 'workflow_review_request_workflow'; +const WORKFLOW_HISTORY_TABLE = 'workflow_history'; +const BASELINE_VERSION_COLUMN = 'baselineVersionId'; + +export class AddBaselineVersionIdToWorkflowReviewRequestWorkflow1785923614352 + implements ReversibleMigration +{ + async up({ schemaBuilder: { addColumns, addForeignKey, column } }: MigrationContext) { + await addColumns( + REVIEW_WORKFLOW_TABLE, + [ + column(BASELINE_VERSION_COLUMN) + .varchar(36) + .comment('Published workflow_history version captured when the review was approved'), + ], + { recreatesOnSqlite: true }, + ); + await addForeignKey( + REVIEW_WORKFLOW_TABLE, + BASELINE_VERSION_COLUMN, + [WORKFLOW_HISTORY_TABLE, 'versionId'], + undefined, + 'SET NULL', + ); + } + + async down({ schemaBuilder: { dropColumns, dropForeignKey } }: MigrationContext) { + await dropForeignKey(REVIEW_WORKFLOW_TABLE, BASELINE_VERSION_COLUMN, [ + WORKFLOW_HISTORY_TABLE, + 'versionId', + ]); + await dropColumns(REVIEW_WORKFLOW_TABLE, [BASELINE_VERSION_COLUMN], { + recreatesOnSqlite: true, + }); + } +} diff --git a/packages/@n8n/db/src/migrations/postgresdb/index.ts b/packages/@n8n/db/src/migrations/postgresdb/index.ts index 9fcafac14c1..23c578d6c1a 100644 --- a/packages/@n8n/db/src/migrations/postgresdb/index.ts +++ b/packages/@n8n/db/src/migrations/postgresdb/index.ts @@ -238,6 +238,7 @@ import { AddMisfirePolicyToScheduler1785247194307 } from '../common/178524719430 import { CreateAgentChatAttachmentsTable1785255306000 } from '../common/1785255306000-CreateAgentChatAttachmentsTable'; import { AddSetupCompletedAtToAgents1785500832626 } from '../common/1785500832626-AddSetupCompletedAtToAgents'; import { AddAgentExecutionRuntimeState1785828155091 } from '../common/1785828155091-AddAgentExecutionRuntimeState'; +import { AddBaselineVersionIdToWorkflowReviewRequestWorkflow1785923614352 } from '../common/1785923614352-AddBaselineVersionIdToWorkflowReviewRequestWorkflow'; import type { Migration } from '../migration-types'; export const postgresMigrations: Migration[] = [ @@ -481,4 +482,5 @@ export const postgresMigrations: Migration[] = [ CreateAgentChatAttachmentsTable1785255306000, AddSetupCompletedAtToAgents1785500832626, AddAgentExecutionRuntimeState1785828155091, + AddBaselineVersionIdToWorkflowReviewRequestWorkflow1785923614352, ]; diff --git a/packages/@n8n/db/src/migrations/sqlite/index.ts b/packages/@n8n/db/src/migrations/sqlite/index.ts index e8fffaa8759..1deb606f273 100644 --- a/packages/@n8n/db/src/migrations/sqlite/index.ts +++ b/packages/@n8n/db/src/migrations/sqlite/index.ts @@ -230,6 +230,7 @@ import { AddAgentFileStorageColumns1785186578138 } from '../common/1785186578138 import { CrashStaleEnqueuedExecutions1785247194306 } from '../common/1785247194306-CrashStaleEnqueuedExecutions'; import { CreateAgentChatAttachmentsTable1785255306000 } from '../common/1785255306000-CreateAgentChatAttachmentsTable'; import { AddAgentExecutionRuntimeState1785828155091 } from '../common/1785828155091-AddAgentExecutionRuntimeState'; +import { AddBaselineVersionIdToWorkflowReviewRequestWorkflow1785923614352 } from '../common/1785923614352-AddBaselineVersionIdToWorkflowReviewRequestWorkflow'; const sqliteMigrations: Migration[] = [ InitialMigration1588102412422, @@ -463,6 +464,7 @@ const sqliteMigrations: Migration[] = [ CreateAgentChatAttachmentsTable1785255306000, AddSetupCompletedAtToAgents1785500832626, AddAgentExecutionRuntimeState1785828155091, + AddBaselineVersionIdToWorkflowReviewRequestWorkflow1785923614352, ]; export { sqliteMigrations };