diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.spec.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.spec.ts index fd4e3b9ef..c7f21371b 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.spec.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.spec.ts @@ -97,6 +97,8 @@ describe('MessagingMessageListFetchService', () => { ], nextSyncCursor: 'new-google-history-id', folderId: undefined, + messageExternalIdsToDelete: [], + previousSyncCursor: 'google-sync-cursor', }, ]; } else { @@ -109,6 +111,8 @@ describe('MessagingMessageListFetchService', () => { ], nextSyncCursor: 'new-sync-cursor', folderId: 'inbox-folder-id', + messageExternalIdsToDelete: [], + previousSyncCursor: 'inbox-sync-cursor', }, ]; } diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.ts index 7d52f69ec..5bbf50eca 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-message-list-fetch.service.ts @@ -57,7 +57,13 @@ export class MessagingMessageListFetchService { } for (const messageList of messageLists) { - const { messageExternalIds, nextSyncCursor, folderId } = messageList; + const { + messageExternalIds, + nextSyncCursor, + folderId, + messageExternalIdsToDelete, + previousSyncCursor, + } = messageList; const messageChannelMessageAssociationRepository = await this.twentyORMManager.getRepository( @@ -84,17 +90,25 @@ export class MessagingMessageListFetchService { ), ); - const messageExternalIdsToDelete = - existingMessageChannelMessageAssociationsExternalIds.filter( - (existingMessageCMAExternalId) => - existingMessageCMAExternalId && - !messageExternalIds.includes(existingMessageCMAExternalId), - ); + const isFullSync = !previousSyncCursor; - if (messageExternalIdsToDelete.length) { + const additionalMessageExternalIdsToDelete = isFullSync + ? existingMessageChannelMessageAssociationsExternalIds.filter( + (existingMessageCMAExternalId) => + existingMessageCMAExternalId && + !messageExternalIds.includes(existingMessageCMAExternalId), + ) + : []; + + const allMessageExternalIdsToDelete = [ + ...messageExternalIdsToDelete, + ...additionalMessageExternalIdsToDelete, + ]; + + if (allMessageExternalIdsToDelete.length) { await messageChannelMessageAssociationRepository.delete({ messageChannelId: messageChannel.id, - messageExternalId: In(messageExternalIdsToDelete), + messageExternalId: In(allMessageExternalIdsToDelete), }); await this.messagingMessageCleanerService.cleanWorkspaceThreads(