Refactor calendar to use new sync statuses and stages (#6141)
- Refactor calendar modules and some messaging modules to better organize them by business rules and decouple them - Work toward a common architecture for the different calendar providers by introducing interfaces for the drivers - Modify cron job to use the new sync statuses and stages
This commit is contained in:
@ -1,4 +1,6 @@
|
||||
import { Logger, Scope } from '@nestjs/common';
|
||||
import { Scope } from '@nestjs/common';
|
||||
|
||||
import { Any } from 'typeorm';
|
||||
|
||||
import { Processor } from 'src/engine/integrations/message-queue/decorators/processor.decorator';
|
||||
import { MessageQueue } from 'src/engine/integrations/message-queue/message-queue.constants';
|
||||
@ -6,12 +8,16 @@ import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repos
|
||||
import { ConnectedAccountRepository } from 'src/modules/connected-account/repositories/connected-account.repository';
|
||||
import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
|
||||
import { Process } from 'src/engine/integrations/message-queue/decorators/process.decorator';
|
||||
import { CalendarEventsImportService } from 'src/modules/calendar/calendar-event-import-manager/services/calendar-events-import.service';
|
||||
import { InjectWorkspaceRepository } from 'src/engine/twenty-orm/decorators/inject-workspace-repository.decorator';
|
||||
import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
|
||||
import {
|
||||
CalendarChannelSyncStage,
|
||||
CalendarChannelWorkspaceEntity,
|
||||
} from 'src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity';
|
||||
|
||||
export type BlocklistReimportCalendarEventsJobData = {
|
||||
workspaceId: string;
|
||||
workspaceMemberId: string;
|
||||
handle: string;
|
||||
};
|
||||
|
||||
@Processor({
|
||||
@ -19,44 +25,37 @@ export type BlocklistReimportCalendarEventsJobData = {
|
||||
scope: Scope.REQUEST,
|
||||
})
|
||||
export class BlocklistReimportCalendarEventsJob {
|
||||
private readonly logger = new Logger(BlocklistReimportCalendarEventsJob.name);
|
||||
|
||||
constructor(
|
||||
@InjectObjectMetadataRepository(ConnectedAccountWorkspaceEntity)
|
||||
private readonly connectedAccountRepository: ConnectedAccountRepository,
|
||||
private readonly googleCalendarSyncService: CalendarEventsImportService,
|
||||
@InjectWorkspaceRepository(CalendarChannelWorkspaceEntity)
|
||||
private readonly calendarChannelRepository: WorkspaceRepository<CalendarChannelWorkspaceEntity>,
|
||||
) {}
|
||||
|
||||
@Process(BlocklistReimportCalendarEventsJob.name)
|
||||
async handle(data: BlocklistReimportCalendarEventsJobData): Promise<void> {
|
||||
const { workspaceId, workspaceMemberId, handle } = data;
|
||||
const { workspaceId, workspaceMemberId } = data;
|
||||
|
||||
this.logger.log(
|
||||
`Reimporting calendar events from handle ${handle} in workspace ${workspaceId} for workspace member ${workspaceMemberId}`,
|
||||
);
|
||||
|
||||
const connectedAccount =
|
||||
const connectedAccounts =
|
||||
await this.connectedAccountRepository.getAllByWorkspaceMemberId(
|
||||
workspaceMemberId,
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
if (!connectedAccount || connectedAccount.length === 0) {
|
||||
this.logger.error(
|
||||
`No connected account found for workspace member ${workspaceMemberId} in workspace ${workspaceId}`,
|
||||
);
|
||||
|
||||
if (!connectedAccounts || connectedAccounts.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
await this.googleCalendarSyncService.processCalendarEventsImport(
|
||||
workspaceId,
|
||||
connectedAccount[0].id,
|
||||
handle,
|
||||
);
|
||||
|
||||
this.logger.log(
|
||||
`Reimporting calendar events from ${handle} in workspace ${workspaceId} for workspace member ${workspaceMemberId} done`,
|
||||
await this.calendarChannelRepository.update(
|
||||
{
|
||||
connectedAccountId: Any(
|
||||
connectedAccounts.map((connectedAccount) => connectedAccount.id),
|
||||
),
|
||||
},
|
||||
{
|
||||
syncStage:
|
||||
CalendarChannelSyncStage.FULL_CALENDAR_EVENT_LIST_FETCH_PENDING,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -46,7 +46,6 @@ export class CalendarBlocklistListener {
|
||||
{
|
||||
workspaceId: payload.workspaceId,
|
||||
workspaceMemberId: payload.properties.before.workspaceMember.id,
|
||||
handle: payload.properties.before.handle,
|
||||
},
|
||||
);
|
||||
}
|
||||
@ -68,7 +67,6 @@ export class CalendarBlocklistListener {
|
||||
{
|
||||
workspaceId: payload.workspaceId,
|
||||
workspaceMemberId: payload.properties.after.workspaceMember.id,
|
||||
handle: payload.properties.before.handle,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user