From 25a984dc6a9f9467cd0b3b1020542602da84eb8d Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Sun, 26 May 2024 14:48:30 +0800 Subject: [PATCH] check for existing job before enqueueing --- .../api/src/resolvers/just_read_feed/index.ts | 15 ++++++++++++++- packages/api/src/utils/createTask.ts | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/api/src/resolvers/just_read_feed/index.ts b/packages/api/src/resolvers/just_read_feed/index.ts index b2fe5a8f3..e6ff119a6 100644 --- a/packages/api/src/resolvers/just_read_feed/index.ts +++ b/packages/api/src/resolvers/just_read_feed/index.ts @@ -5,7 +5,11 @@ import { QueryJustReadFeedArgs, } from '../../generated/graphql' import { getJustReadFeedSections } from '../../jobs/update_just_read_feed' -import { enqueueUpdateJustReadFeed } from '../../utils/createTask' +import { getJob } from '../../queue-processor' +import { + enqueueUpdateJustReadFeed, + updateJustReadFeedJobId, +} from '../../utils/createTask' import { authorized } from '../../utils/gql-utils' // This resolver is used to fetch the just read feed for the user. @@ -23,6 +27,15 @@ export const justReadFeedResolver = authorized< log.info('Just read feed sections fetched') if (sections.length === 0) { + const existingJob = await getJob(updateJustReadFeedJobId(uid)) + if (existingJob) { + log.info('Just read feed update job already enqueued') + + return { + errorCodes: [JustReadFeedErrorCode.Pending], + } + } + await enqueueUpdateJustReadFeed({ userId: uid, }) diff --git a/packages/api/src/utils/createTask.ts b/packages/api/src/utils/createTask.ts index 5903d8193..3f4f12061 100644 --- a/packages/api/src/utils/createTask.ts +++ b/packages/api/src/utils/createTask.ts @@ -986,6 +986,9 @@ export const enqueueBulkUploadContentJob = async ( return queue.addBulk(jobs) } +export const updateJustReadFeedJobId = (userId: string) => + `${UPDATE_JUST_READ_FEED_JOB}_${userId}_${JOB_VERSION}` + export const enqueueUpdateJustReadFeed = async ( data: UpdateJustReadFeedJobData ) => { @@ -995,7 +998,7 @@ export const enqueueUpdateJustReadFeed = async ( } return queue.add(UPDATE_JUST_READ_FEED_JOB, data, { - jobId: `${UPDATE_JUST_READ_FEED_JOB}_${data.userId}_${JOB_VERSION}`, + jobId: updateJustReadFeedJobId(data.userId), removeOnComplete: true, removeOnFail: true, priority: getJobPriority(UPDATE_JUST_READ_FEED_JOB),