3921 delete messagethreads after deleting connectedaccount (#3925)
* created listener * working --------- Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
@ -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}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user