From 924fae9d3cdec579eeb9544715de637ab4a5e236 Mon Sep 17 00:00:00 2001 From: Giorgi Bagdavadze Date: Fri, 23 May 2025 15:59:46 +0400 Subject: [PATCH] feat: delete AI agent slack integrations when removing Slack installation --- packages/backend/src/ee/index.ts | 1 + .../backend/src/ee/models/AiAgentModel.ts | 23 ++++++++++++++++ .../CommercialSlackIntegrationService.ts | 27 ++++++++++++++++++- .../SlackIntegrationService.ts | 2 +- 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/ee/index.ts b/packages/backend/src/ee/index.ts index c6db915977fcc..b4aa11b484262 100644 --- a/packages/backend/src/ee/index.ts +++ b/packages/backend/src/ee/index.ts @@ -130,6 +130,7 @@ export async function getEnterpriseAppArguments(): Promise new SupportService({ diff --git a/packages/backend/src/ee/models/AiAgentModel.ts b/packages/backend/src/ee/models/AiAgentModel.ts index 7895d87f14353..c75a5275cba71 100644 --- a/packages/backend/src/ee/models/AiAgentModel.ts +++ b/packages/backend/src/ee/models/AiAgentModel.ts @@ -507,4 +507,27 @@ export class AiAgentModel { return messages; }); } + + async deleteSlackIntegrations({ + organizationUuid, + }: { + organizationUuid: string; + }): Promise { + await this.database + .from(AiAgentIntegrationTableName) + .delete() + .where( + `${AiAgentIntegrationTableName}.ai_agent_integration_uuid`, + 'IN', + this.database + .from(AiAgentSlackIntegrationTableName) + .select( + `${AiAgentSlackIntegrationTableName}.ai_agent_integration_uuid`, + ) + .where( + `${AiAgentSlackIntegrationTableName}.organization_uuid`, + organizationUuid, + ), + ); + } } diff --git a/packages/backend/src/ee/services/CommercialSlackIntegrationService.ts b/packages/backend/src/ee/services/CommercialSlackIntegrationService.ts index 55511dcd698c5..7b9f1d615e755 100644 --- a/packages/backend/src/ee/services/CommercialSlackIntegrationService.ts +++ b/packages/backend/src/ee/services/CommercialSlackIntegrationService.ts @@ -1,8 +1,25 @@ import { ForbiddenError, SessionUser, SlackSettings } from '@lightdash/common'; -import { SlackIntegrationService } from '../../services/SlackIntegrationService/SlackIntegrationService'; +import { + SlackIntegrationService, + SlackIntegrationServiceArguments, +} from '../../services/SlackIntegrationService/SlackIntegrationService'; +import { AiAgentModel } from '../models/AiAgentModel'; import { CommercialSlackAuthenticationModel } from '../models/CommercialSlackAuthenticationModel'; export class CommercialSlackIntegrationService extends SlackIntegrationService { + private readonly aiAgentModel: AiAgentModel; + + constructor({ + aiAgentModel, + ...rest + }: SlackIntegrationServiceArguments & { + aiAgentModel: AiAgentModel; + }) { + super(rest); + + this.aiAgentModel = aiAgentModel; + } + async getInstallationFromOrganizationUuid(user: SessionUser) { const organizationUuid = user?.organizationUuid; if (!organizationUuid) throw new ForbiddenError(); @@ -26,4 +43,12 @@ export class CommercialSlackIntegrationService extends SlackIntegrationService = { analytics: LightdashAnalytics;