From ec48e66eeb2b0789de58fc176c2c8dfdef59383a Mon Sep 17 00:00:00 2001 From: bosiraphael <71827178+bosiraphael@users.noreply.github.com> Date: Tue, 13 Feb 2024 14:36:55 +0100 Subject: [PATCH] 3921 delete messagethreads after deleting connectedaccount (#3925) * created listener * working --------- Co-authored-by: Weiko --- ...message-channel-message-association.job.ts | 40 +++++++++++++++++++ .../messaging-message-channel.listener.ts | 32 +++++++++++++++ ...age-channel-message-association.service.ts | 16 ++++++++ .../workspace/messaging/messaging.module.ts | 2 + 4 files changed, 90 insertions(+) create mode 100644 packages/twenty-server/src/workspace/messaging/jobs/delete-message-channel-message-association.job.ts create mode 100644 packages/twenty-server/src/workspace/messaging/listeners/messaging-message-channel.listener.ts diff --git a/packages/twenty-server/src/workspace/messaging/jobs/delete-message-channel-message-association.job.ts b/packages/twenty-server/src/workspace/messaging/jobs/delete-message-channel-message-association.job.ts new file mode 100644 index 000000000..f4495feb8 --- /dev/null +++ b/packages/twenty-server/src/workspace/messaging/jobs/delete-message-channel-message-association.job.ts @@ -0,0 +1,40 @@ +import { Injectable, Logger } from '@nestjs/common'; + +import { MessageQueueJob } from 'src/integrations/message-queue/interfaces/message-queue-job.interface'; + +import { MessageChannelMessageAssociationService } from 'src/workspace/messaging/message-channel-message-association/message-channel-message-association.service'; + +export type DeleteMessageChannelMessageAssociationJobData = { + workspaceId: string; + messageChannelId: string; +}; + +@Injectable() +export class DeleteMessageChannelMessageAssociationJob + implements MessageQueueJob +{ + private readonly logger = new Logger( + DeleteMessageChannelMessageAssociationJob.name, + ); + + constructor( + private readonly messageChannelMessageAssociationService: MessageChannelMessageAssociationService, + ) {} + + async handle( + data: DeleteMessageChannelMessageAssociationJobData, + ): Promise { + this.logger.log( + `Deleting message channel message association for message channel ${data.messageChannelId} in workspace ${data.workspaceId}`, + ); + + await this.messageChannelMessageAssociationService.deleteByMessageChannelId( + data.messageChannelId, + data.workspaceId, + ); + + this.logger.log( + `Deleted message channel message association for message channel ${data.messageChannelId} in workspace ${data.workspaceId}`, + ); + } +} diff --git a/packages/twenty-server/src/workspace/messaging/listeners/messaging-message-channel.listener.ts b/packages/twenty-server/src/workspace/messaging/listeners/messaging-message-channel.listener.ts new file mode 100644 index 000000000..55978a22a --- /dev/null +++ b/packages/twenty-server/src/workspace/messaging/listeners/messaging-message-channel.listener.ts @@ -0,0 +1,32 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { OnEvent } from '@nestjs/event-emitter'; + +import { ObjectRecordDeleteEvent } from 'src/integrations/event-emitter/types/object-record-delete.event'; +import { MessageQueue } from 'src/integrations/message-queue/message-queue.constants'; +import { MessageQueueService } from 'src/integrations/message-queue/services/message-queue.service'; +import { + DeleteMessageChannelMessageAssociationJob, + DeleteMessageChannelMessageAssociationJobData, +} from 'src/workspace/messaging/jobs/delete-message-channel-message-association.job'; +import { MessageChannelObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel.object-metadata'; + +@Injectable() +export class MessagingMessageChannelListener { + constructor( + @Inject(MessageQueue.messagingQueue) + private readonly messageQueueService: MessageQueueService, + ) {} + + @OnEvent('messageChannel.deleted') + handleDeletedEvent( + payload: ObjectRecordDeleteEvent, + ) { + this.messageQueueService.add( + DeleteMessageChannelMessageAssociationJob.name, + { + workspaceId: payload.workspaceId, + messageChannelId: payload.deletedRecord.id, + }, + ); + } +} diff --git a/packages/twenty-server/src/workspace/messaging/message-channel-message-association/message-channel-message-association.service.ts b/packages/twenty-server/src/workspace/messaging/message-channel-message-association/message-channel-message-association.service.ts index cf2406c32..ed9b67539 100644 --- a/packages/twenty-server/src/workspace/messaging/message-channel-message-association/message-channel-message-association.service.ts +++ b/packages/twenty-server/src/workspace/messaging/message-channel-message-association/message-channel-message-association.service.ts @@ -67,6 +67,22 @@ export class MessageChannelMessageAssociationService { ); } + public async deleteByMessageChannelId( + messageChannelId: string, + workspaceId: string, + transactionManager?: EntityManager, + ) { + const dataSourceSchema = + this.workspaceDataSourceService.getSchemaName(workspaceId); + + await this.workspaceDataSourceService.executeRawQuery( + `DELETE FROM ${dataSourceSchema}."messageChannelMessageAssociation" WHERE "messageChannelId" = $1`, + [messageChannelId], + workspaceId, + transactionManager, + ); + } + public async deleteByIds( ids: string[], workspaceId: string, diff --git a/packages/twenty-server/src/workspace/messaging/messaging.module.ts b/packages/twenty-server/src/workspace/messaging/messaging.module.ts index 3a349d3c9..d2708d890 100644 --- a/packages/twenty-server/src/workspace/messaging/messaging.module.ts +++ b/packages/twenty-server/src/workspace/messaging/messaging.module.ts @@ -18,6 +18,7 @@ import { IsPersonEmailService } from 'src/workspace/messaging/services/is-person import { WorkspaceDataSourceModule } from 'src/workspace/workspace-datasource/workspace-datasource.module'; import { MessageParticipantModule } from 'src/workspace/messaging/message-participant/message-participant.module'; import { MessagingWorkspaceMemberListener } from 'src/workspace/messaging/listeners/messaging-workspace-member.listener'; +import { MessagingMessageChannelListener } from 'src/workspace/messaging/listeners/messaging-message-channel.listener'; import { MessageService } from 'src/workspace/messaging/message/message.service'; import { CreateQueriesFromMessageIdsService } from 'src/workspace/messaging/services/utils/create-queries-from-message-ids.service'; @@ -43,6 +44,7 @@ import { CreateQueriesFromMessageIdsService } from 'src/workspace/messaging/serv CreateCompanyService, MessagingPersonListener, MessagingWorkspaceMemberListener, + MessagingMessageChannelListener, MessageService, CreateQueriesFromMessageIdsService, ],