Emit event on message creation (#11466)

adding event emitting on message creation
This commit is contained in:
Thomas Trompette
2025-04-09 11:04:43 +02:00
committed by GitHub
parent c6be260fec
commit 46bbf02431
3 changed files with 32 additions and 2 deletions

View File

@ -910,7 +910,7 @@ export class EnvironmentVariables {
description: 'Throttle limit for workflow execution', description: 'Throttle limit for workflow execution',
}) })
@CastToPositiveNumber() @CastToPositiveNumber()
WORKFLOW_EXEC_THROTTLE_LIMIT = 10; WORKFLOW_EXEC_THROTTLE_LIMIT = 500;
@EnvironmentVariablesMetadata({ @EnvironmentVariablesMetadata({
group: EnvironmentVariablesGroup.RateLimiting, group: EnvironmentVariablesGroup.RateLimiting,

View File

@ -5,7 +5,9 @@ import { BillingModule } from 'src/engine/core-modules/billing/billing.module';
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
import { WorkspaceEventEmitterModule } from 'src/engine/workspace-event-emitter/workspace-event-emitter.module';
import { EmailAliasManagerModule } from 'src/modules/connected-account/email-alias-manager/email-alias-manager.module'; import { EmailAliasManagerModule } from 'src/modules/connected-account/email-alias-manager/email-alias-manager.module';
import { RefreshTokensManagerModule } from 'src/modules/connected-account/refresh-tokens-manager/connected-account-refresh-tokens-manager.module'; import { RefreshTokensManagerModule } from 'src/modules/connected-account/refresh-tokens-manager/connected-account-refresh-tokens-manager.module';
import { MessagingCommonModule } from 'src/modules/messaging/common/messaging-common.module'; import { MessagingCommonModule } from 'src/modules/messaging/common/messaging-common.module';
@ -52,6 +54,8 @@ import { MessagingMonitoringModule } from 'src/modules/messaging/monitoring/mess
MessageParticipantManagerModule, MessageParticipantManagerModule,
MessagingMonitoringModule, MessagingMonitoringModule,
MessagingMessageCleanerModule, MessagingMessageCleanerModule,
WorkspaceEventEmitterModule,
TypeOrmModule.forFeature([ObjectMetadataEntity], 'metadata'),
], ],
providers: [ providers: [
MessagingMessageListFetchCronCommand, MessagingMessageListFetchCronCommand,

View File

@ -1,12 +1,16 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { EntityManager } from 'typeorm'; import { EntityManager, Repository } from 'typeorm';
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator'; import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator';
import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service';
import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager'; import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
import { import {
CreateCompanyAndContactJob, CreateCompanyAndContactJob,
@ -34,6 +38,9 @@ export class MessagingSaveMessagesAndEnqueueContactCreationService {
private readonly messageService: MessagingMessageService, private readonly messageService: MessagingMessageService,
private readonly messageParticipantService: MessagingMessageParticipantService, private readonly messageParticipantService: MessagingMessageParticipantService,
private readonly twentyORMManager: TwentyORMManager, private readonly twentyORMManager: TwentyORMManager,
private readonly workspaceEventEmitter: WorkspaceEventEmitter,
@InjectRepository(ObjectMetadataEntity, 'metadata')
private readonly objectMetadataRepository: Repository<ObjectMetadataEntity>,
) {} ) {}
async saveMessagesAndEnqueueContactCreation( async saveMessagesAndEnqueueContactCreation(
@ -111,6 +118,25 @@ export class MessagingSaveMessagesAndEnqueueContactCreationService {
}, },
); );
const messageMetadata = await this.objectMetadataRepository.findOneOrFail({
where: { nameSingular: 'message', workspaceId },
});
this.workspaceEventEmitter.emitDatabaseBatchEvent({
objectMetadataNameSingular: 'message',
action: DatabaseEventAction.CREATED,
events: messagesToSave.map((message) => {
return {
recordId: message.headerMessageId,
objectMetadata: messageMetadata,
properties: {
after: message,
},
};
}),
workspaceId,
});
if (messageChannel.isContactAutoCreationEnabled) { if (messageChannel.isContactAutoCreationEnabled) {
const contactsToCreate = participantsWithMessageId.filter( const contactsToCreate = participantsWithMessageId.filter(
(participant) => participant.shouldCreateContact, (participant) => participant.shouldCreateContact,