fix: IMAP Import (#13500)

/closes #13397
This commit is contained in:
neo773
2025-07-30 18:38:00 +05:30
committed by GitHub
parent 11a0fce1c8
commit 0e4e3acaba
5 changed files with 111 additions and 56 deletions
@@ -1,6 +1,7 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from 'src/engine/core-modules/auth/auth.module';
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
import { MessageQueueModule } from 'src/engine/core-modules/message-queue/message-queue.module';
import { TwentyConfigModule } from 'src/engine/core-modules/twenty-config/twenty-config.module';
@@ -17,6 +18,7 @@ import { ImapSmtpCalDavAPIService } from 'src/modules/connected-account/services
TwentyConfigModule,
TwentyORMModule,
FeatureFlagModule,
AuthModule,
],
providers: [ImapSmtpCalDavAPIService],
exports: [ImapSmtpCalDavAPIService],
@@ -3,10 +3,12 @@ import { Injectable } from '@nestjs/common';
import { ConnectedAccountProvider } from 'twenty-shared/types';
import { v4 } from 'uuid';
import { CreateMessageFolderService } from 'src/engine/core-modules/auth/services/create-message-folder.service';
import { EmailAccountConnectionParameters } from 'src/engine/core-modules/imap-smtp-caldav-connection/dtos/imap-smtp-caldav-connection.dto';
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 { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service';
import { WorkspaceEntityManager } from 'src/engine/twenty-orm/entity-manager/workspace-entity-manager';
import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
import {
@@ -38,6 +40,7 @@ export class ImapSmtpCalDavAPIService {
private readonly messageQueueService: MessageQueueService,
@InjectMessageQueue(MessageQueue.calendarQueue)
private readonly calendarQueueService: MessageQueueService,
private readonly createMessageFolderService: CreateMessageFolderService,
) {}
async setupCompleteAccount(input: {
@@ -86,25 +89,28 @@ export class ImapSmtpCalDavAPIService {
let createdMessageChannel: MessageChannelWorkspaceEntity | null = null;
let createdCalendarChannel: CalendarChannelWorkspaceEntity | null = null;
await workspaceDataSource.transaction(async () => {
await this.upsertConnectedAccount(
input,
accountId,
connectedAccountRepository,
);
await workspaceDataSource.transaction(
async (manager: WorkspaceEntityManager) => {
await this.upsertConnectedAccount(
input,
accountId,
connectedAccountRepository,
);
createdMessageChannel = await this.setupMessageChannels(
input,
accountId,
messageChannelRepository,
);
createdMessageChannel = await this.setupMessageChannels(
input,
accountId,
messageChannelRepository,
manager,
);
createdCalendarChannel = await this.setupCalendarChannels(
input,
accountId,
calendarChannelRepository,
);
});
createdCalendarChannel = await this.setupCalendarChannels(
input,
accountId,
calendarChannelRepository,
);
},
);
await this.enqueueSyncJobs(
input,
@@ -143,6 +149,7 @@ export class ImapSmtpCalDavAPIService {
},
accountId: string,
messageChannelRepository: WorkspaceRepository<MessageChannelWorkspaceEntity>,
manager: WorkspaceEntityManager,
): Promise<MessageChannelWorkspaceEntity | null> {
const existingChannels = await messageChannelRepository.find({
where: { connectedAccountId: accountId },
@@ -175,6 +182,12 @@ export class ImapSmtpCalDavAPIService {
{},
);
await this.createMessageFolderService.createMessageFolders({
workspaceId: input.workspaceId,
messageChannelId: newMessageChannel.id,
manager,
});
return shouldEnableSync ? newMessageChannel : null;
}