From 88888e1dc76ed7ab4feeacc15ad0de19a1a6dda9 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Sat, 23 May 2026 01:35:08 +0100 Subject: [PATCH] fix(integrations): scope Slack-kind backfill, fix index where-clause types --- ...0260523T120000-integration-connections-kind.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/server/src/database/migrations/20260523T120000-integration-connections-kind.ts b/apps/server/src/database/migrations/20260523T120000-integration-connections-kind.ts index 6b3866321..9f0287d4a 100644 --- a/apps/server/src/database/migrations/20260523T120000-integration-connections-kind.ts +++ b/apps/server/src/database/migrations/20260523T120000-integration-connections-kind.ts @@ -21,11 +21,14 @@ export async function up(db: Kysely): Promise { CHECK (kind IN ('workspace', 'user')) `.execute(db); - // 3. Backfill: existing rows with access_token AND scopes are workspace installs + // 3. Backfill: existing Slack workspace installs (rows with access_token) await sql` - UPDATE integration_connections + UPDATE integration_connections AS ic SET kind = 'workspace' - WHERE access_token IS NOT NULL AND scopes IS NOT NULL + FROM integrations AS i + WHERE ic.integration_id = i.id + AND i.type = 'slack' + AND ic.access_token IS NOT NULL `.execute(db); // 4. One workspace connection per integration @@ -33,7 +36,7 @@ export async function up(db: Kysely): Promise { .createIndex('uq_integration_connections_workspace_per_integration') .on('integration_connections') .column('integration_id') - .where('kind', '=', 'workspace') + .where(sql.ref('kind'), '=', 'workspace') .unique() .execute(); } @@ -50,4 +53,8 @@ export async function down(db: Kysely): Promise { .alterTable('integration_connections') .dropColumn('kind') .execute(); + + // Note: we don't restore NOT NULL on access_token in down(); by this point + // there may be legitimate null-token rows (identity-only user links) that + // would block re-adding the constraint. }