3921 delete messagethreads after deleting connectedaccount (#3925)

* created listener

* working

---------

Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
bosiraphael
2024-02-13 14:36:55 +01:00
committed by GitHub
parent 1d1976ef22
commit ec48e66eeb
4 changed files with 90 additions and 0 deletions

View File

@ -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<DeleteMessageChannelMessageAssociationJobData>
{
private readonly logger = new Logger(
DeleteMessageChannelMessageAssociationJob.name,
);
constructor(
private readonly messageChannelMessageAssociationService: MessageChannelMessageAssociationService,
) {}
async handle(
data: DeleteMessageChannelMessageAssociationJobData,
): Promise<void> {
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}`,
);
}
}

View File

@ -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<MessageChannelObjectMetadata>,
) {
this.messageQueueService.add<DeleteMessageChannelMessageAssociationJobData>(
DeleteMessageChannelMessageAssociationJob.name,
{
workspaceId: payload.workspaceId,
messageChannelId: payload.deletedRecord.id,
},
);
}
}

View File

@ -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,

View File

@ -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,
],