diff --git a/packages/twenty-front/tsconfig.json b/packages/twenty-front/tsconfig.json index f6c268d9c..ec14700eb 100644 --- a/packages/twenty-front/tsconfig.json +++ b/packages/twenty-front/tsconfig.json @@ -45,4 +45,4 @@ } ], "extends": "../../tsconfig.base.json" -} \ No newline at end of file +} diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook-jobs.job.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook-jobs.job.ts index 818be2a60..f4f6f9dca 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook-jobs.job.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook-jobs.job.ts @@ -1,18 +1,20 @@ import { Logger } from '@nestjs/common'; +import { Like } from 'typeorm'; + import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; -import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service'; -import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; -import { MessageQueueService } from 'src/engine/integrations/message-queue/services/message-queue.service'; -import { MessageQueue } from 'src/engine/integrations/message-queue/message-queue.constants'; import { CallWebhookJob, CallWebhookJobData, } from 'src/engine/api/graphql/workspace-query-runner/jobs/call-webhook.job'; import { InjectMessageQueue } from 'src/engine/integrations/message-queue/decorators/message-queue.decorator'; -import { Processor } from 'src/engine/integrations/message-queue/decorators/processor.decorator'; import { Process } from 'src/engine/integrations/message-queue/decorators/process.decorator'; +import { Processor } from 'src/engine/integrations/message-queue/decorators/processor.decorator'; +import { MessageQueue } from 'src/engine/integrations/message-queue/message-queue.constants'; +import { MessageQueueService } from 'src/engine/integrations/message-queue/services/message-queue.service'; +import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; +import { WebhookWorkspaceEntity } from 'src/modules/webhook/standard-objects/webhook.workspace-entity'; export enum CallWebhookJobsJobOperation { create = 'create', @@ -32,42 +34,38 @@ export class CallWebhookJobsJob { private readonly logger = new Logger(CallWebhookJobsJob.name); constructor( - private readonly workspaceDataSourceService: WorkspaceDataSourceService, - private readonly dataSourceService: DataSourceService, @InjectMessageQueue(MessageQueue.webhookQueue) private readonly messageQueueService: MessageQueueService, + private readonly twentyORMGlobalManager: TwentyORMGlobalManager, ) {} @Process(CallWebhookJobsJob.name) async handle(data: CallWebhookJobsJobData): Promise { - const dataSourceMetadata = - await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceIdOrFail( - data.workspaceId, - ); - const workspaceDataSource = - await this.workspaceDataSourceService.connectToWorkspaceDataSource( + const webhookRepository = + await this.twentyORMGlobalManager.getRepositoryForWorkspace( data.workspaceId, + 'webhook', ); + const nameSingular = data.objectMetadataItem.nameSingular; const operation = data.operation; - const eventType = `${operation}.${nameSingular}`; - const webhooks: { id: string; targetUrl: string }[] = - await workspaceDataSource?.query( - ` - SELECT * FROM ${dataSourceMetadata.schema}."webhook" - WHERE operation LIKE '%${eventType}%' - OR operation LIKE '%*.${nameSingular}%' - OR operation LIKE '%${operation}.*%' - OR operation LIKE '%*.*%' - `, - ); + const eventName = `${nameSingular}.${operation}`; + + const webhooks = await webhookRepository.find({ + where: [ + { operation: Like(`%${eventName}%`) }, + { operation: Like(`%*.${operation}%`) }, + { operation: Like(`%${nameSingular}.*%`) }, + { operation: Like('%*.*%') }, + ], + }); webhooks.forEach((webhook) => { this.messageQueueService.add( CallWebhookJob.name, { targetUrl: webhook.targetUrl, - eventType, + eventName, objectMetadata: { id: data.objectMetadataItem.id, nameSingular: data.objectMetadataItem.nameSingular, @@ -83,7 +81,7 @@ export class CallWebhookJobsJob { if (webhooks.length) { this.logger.log( - `CallWebhookJobsJob on eventType '${eventType}' called on webhooks ids [\n"${webhooks + `CallWebhookJobsJob on eventName '${event}' called on webhooks ids [\n"${webhooks .map((webhook) => webhook.id) .join('",\n"')}"\n]`, ); diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook.job.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook.job.ts index d18686e96..6e0d7af52 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook.job.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/jobs/call-webhook.job.ts @@ -1,13 +1,13 @@ -import { Logger } from '@nestjs/common'; import { HttpService } from '@nestjs/axios'; +import { Logger } from '@nestjs/common'; +import { Process } from 'src/engine/integrations/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/integrations/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/integrations/message-queue/message-queue.constants'; -import { Process } from 'src/engine/integrations/message-queue/decorators/process.decorator'; export type CallWebhookJobData = { targetUrl: string; - eventType: string; + eventName: string; objectMetadata: { id: string; nameSingular: string }; workspaceId: string; webhookId: string;