diff --git a/packages/api/src/util.ts b/packages/api/src/util.ts index 0ca9ad8b8..1b8ff76f0 100755 --- a/packages/api/src/util.ts +++ b/packages/api/src/util.ts @@ -62,9 +62,10 @@ interface BackendEnv { name: string contentFetchUrl: string contentFetchGCFUrl: string - reminderTaskHanderUrl: string + reminderTaskHandlerUrl: string integrationTaskHandlerUrl: string textToSpeechTaskHandlerUrl: string + recommendationTaskHandlerUrl: string } fileUpload: { gcsUploadBucket: string @@ -152,6 +153,7 @@ const nullableEnvVars = [ 'AZURE_SPEECH_KEY', 'AZURE_SPEECH_REGION', 'GCP_LOCATION', + 'RECOMMENDATION_TASK_HANDLER_URL', ] // Allow some vars to be null/empty /* If not in GAE and Prod/QA/Demo env (f.e. on localhost/dev env), allow following env vars to be null */ @@ -234,9 +236,10 @@ export function getEnv(): BackendEnv { name: parse('PUPPETEER_QUEUE_NAME'), contentFetchUrl: parse('CONTENT_FETCH_URL'), contentFetchGCFUrl: parse('CONTENT_FETCH_GCF_URL'), - reminderTaskHanderUrl: parse('REMINDER_TASK_HANDLER_URL'), + reminderTaskHandlerUrl: parse('REMINDER_TASK_HANDLER_URL'), integrationTaskHandlerUrl: parse('INTEGRATION_TASK_HANDLER_URL'), textToSpeechTaskHandlerUrl: parse('TEXT_TO_SPEECH_TASK_HANDLER_URL'), + recommendationTaskHandlerUrl: parse('RECOMMENDATION_TASK_HANDLER_URL'), } const imageProxy = { url: parse('IMAGE_PROXY_URL'), diff --git a/packages/api/src/utils/createTask.ts b/packages/api/src/utils/createTask.ts index cefe0fead..fe7d9743e 100644 --- a/packages/api/src/utils/createTask.ts +++ b/packages/api/src/utils/createTask.ts @@ -10,6 +10,7 @@ import { nanoid } from 'nanoid' import { google } from '@google-cloud/tasks/build/protos/protos' import { IntegrationType } from '../entity/integration' import { signFeatureToken } from '../services/features' +import { Group } from '../elastic/types' import View = google.cloud.tasks.v2.Task.View const logger = buildLogger('app.dispatch') @@ -95,7 +96,7 @@ export const createAppEngineTask = async ({ project, queue = env.queue.name, location = env.queue.location, - taskHandlerUrl = env.queue.reminderTaskHanderUrl, + taskHandlerUrl = env.queue.reminderTaskHandlerUrl, payload, priority = 'high', scheduleTime, @@ -278,7 +279,7 @@ export const enqueueReminder = async ( project: GOOGLE_CLOUD_PROJECT, payload, scheduleTime, - taskHandlerUrl: env.queue.reminderTaskHanderUrl, + taskHandlerUrl: env.queue.reminderTaskHandlerUrl, }) if (!createdTasks || !createdTasks[0].name) { @@ -405,4 +406,39 @@ export const enqueueTextToSpeech = async ({ return createdTasks[0].name } +export const enqueueRecommendation = async ( + recommendedUserId: string, + recommendedPageId: string, + userId: string, + group: Group +): Promise => { + const { GOOGLE_CLOUD_PROJECT } = process.env + const payload = { + userId, + recommendedUserId, + recommendedPageId, + group, + } + + // 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.recommendationTaskHandlerUrl, + }) + + 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