4489 timebox finish google calendar full sync (#4615)

* add lodash differenceWith

* add awaits

* update sync cursor is working

* add logs

* use isSyncEnabled information to enqueue jobs

* add decorator InjectObjectMetadataRepository

* fix gmail-full-sync
This commit is contained in:
bosiraphael
2024-03-22 18:10:55 +01:00
committed by GitHub
parent 41aae5bd20
commit 5665656b05
7 changed files with 176 additions and 56 deletions

View File

@ -79,11 +79,15 @@ export class GoogleCalendarFullSyncService {
}
const calendarChannel =
await this.calendarChannelRepository.getFirstByConnectedAccountIdOrFail(
await this.calendarChannelRepository.getFirstByConnectedAccountId(
connectedAccountId,
workspaceId,
);
if (!calendarChannel) {
return;
}
const calendarChannelId = calendarChannel.id;
const googleCalendarClient =
@ -109,6 +113,7 @@ export class GoogleCalendarFullSyncService {
: [];
const blocklistedEmails = blocklist.map((blocklist) => blocklist.handle);
let startTime = Date.now();
const googleCalendarEvents = await googleCalendarClient.events.list({
@ -206,38 +211,94 @@ export class GoogleCalendarFullSyncService {
workspaceId,
);
dataSourceMetadata?.transaction(async (transactionManager) => {
this.calendarEventRepository.saveCalendarEvents(
eventsToSave,
workspaceId,
transactionManager,
);
try {
dataSourceMetadata?.transaction(async (transactionManager) => {
startTime = Date.now();
this.calendarEventRepository.updateCalendarEvents(
eventsToUpdate,
workspaceId,
transactionManager,
);
await this.calendarEventRepository.saveCalendarEvents(
eventsToSave,
workspaceId,
transactionManager,
);
this.calendarChannelEventAssociationRepository.saveCalendarChannelEventAssociations(
calendarChannelEventAssociationsToSave,
workspaceId,
transactionManager,
);
endTime = Date.now();
this.calendarEventAttendeesRepository.saveCalendarEventAttendees(
attendeesToSave,
workspaceId,
transactionManager,
);
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: saving events in ${
endTime - startTime
}ms.`,
);
this.calendarEventAttendeesRepository.updateCalendarEventAttendees(
attendeesToUpdate,
iCalUIDCalendarEventIdMap,
workspaceId,
transactionManager,
startTime = Date.now();
await this.calendarEventRepository.updateCalendarEvents(
eventsToUpdate,
workspaceId,
transactionManager,
);
endTime = Date.now();
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: updating events in ${
endTime - startTime
}ms.`,
);
startTime = Date.now();
await this.calendarChannelEventAssociationRepository.saveCalendarChannelEventAssociations(
calendarChannelEventAssociationsToSave,
workspaceId,
transactionManager,
);
endTime = Date.now();
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: saving calendar channel event associations in ${
endTime - startTime
}ms.`,
);
startTime = Date.now();
await this.calendarEventAttendeesRepository.saveCalendarEventAttendees(
attendeesToSave,
workspaceId,
transactionManager,
);
endTime = Date.now();
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: saving attendees in ${
endTime - startTime
}ms.`,
);
startTime = Date.now();
await this.calendarEventAttendeesRepository.updateCalendarEventAttendees(
attendeesToUpdate,
iCalUIDCalendarEventIdMap,
workspaceId,
transactionManager,
);
endTime = Date.now();
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: updating attendees in ${
endTime - startTime
}ms.`,
);
});
} catch (error) {
this.logger.error(
`Error during google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: ${error.message}`,
);
});
}
} else {
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId} done with nothing to import.`,
@ -252,11 +313,11 @@ export class GoogleCalendarFullSyncService {
startTime = Date.now();
// await this.calendarChannelService.updateSyncCursor(
// nextSyncToken,
// connectedAccount.id,
// workspaceId,
// );
await this.calendarChannelRepository.updateSyncCursor(
nextSyncToken,
calendarChannel.id,
workspaceId,
);
endTime = Date.now();