From eb2ee5ab5594cb4aef0e7148d814e733561024ac Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 5 Aug 2022 12:33:32 +0800 Subject: [PATCH] Add task to handle sync with integrations --- packages/api/src/utils/createTask.ts | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/packages/api/src/utils/createTask.ts b/packages/api/src/utils/createTask.ts index a0cab7909..31f137322 100644 --- a/packages/api/src/utils/createTask.ts +++ b/packages/api/src/utils/createTask.ts @@ -8,6 +8,7 @@ import { CreateTaskError } from './errors' import { buildLogger } from './logger' import { nanoid } from 'nanoid' import { google } from '@google-cloud/tasks/build/protos/protos' +import { IntegrationType } from '../entity/integration' import View = google.cloud.tasks.v2.Task.View const logger = buildLogger('app.dispatch') @@ -283,4 +284,37 @@ export const enqueueReminder = async ( return createdTasks[0].name } +export const enqueueSyncWithIntegration = async ( + userId: string, + integrationType: IntegrationType +): Promise => { + const { GOOGLE_CLOUD_PROJECT } = process.env + const payload = { + userId, + } + + // If there is no Google Cloud Project Id exposed, it means that we are in local environment + if (env.dev.isLocal || !GOOGLE_CLOUD_PROJECT) { + return nanoid() + } + + const createdTasks = await createHttpTaskWithToken({ + project: GOOGLE_CLOUD_PROJECT, + payload, + taskHandlerUrl: `${ + env.queue.integrationTaskHandlerUrl + }/${integrationType.toLowerCase()}/sync_all`, + priority: 'low', + }) + + if (!createdTasks || !createdTasks[0].name) { + logger.error(`Unable to get the name of the task`, { + payload, + createdTasks, + }) + throw new CreateTaskError(`Unable to get the name of the task`) + } + return createdTasks[0].name +} + export default createHttpTaskWithToken