in projects/deliberation_at_scale/packages/orchestrator/src/lib/graphileWorker.ts [67:120]
export async function waitForAllModerationCompletions(options: AllCompletionsWaitOptions) {
const { jobs, timeoutMs } = options;
return Promise.allSettled(jobs.map((job) => {
const jobId = job.id;
return new Promise<ModerationCompletionTuple>((resolve, reject) => {
waitForSingleJobCompletion({
job,
timeoutMs,
}).then((job) => {
const { key: jobKey, run_at: runAt } = job ?? {};
const jobRunnedAt = dayjs(runAt).toISOString();
if (!job || !jobKey || !runAt) {
reject(`No job key or run at found for job ${jobId}`);
return;
}
supabaseClient.from("moderations")
.select()
.eq('active', true)
.eq("job_key", jobKey)
.gt("completed_at", jobRunnedAt)
.order("created_at", { ascending: false })
.limit(1)
.then((result) => {
const { data: moderations, error } = result;
const moderation = moderations?.[0];
const isValidModeration = !!moderation;
// guard: check for error
if (error) {
reject(error);
return;
}
// guard: check if a moderation was found
if (!isValidModeration) {
reject(`No completed moderation found for job key ${jobKey}`);
return;
}
resolve({
job,
moderation,
});
});
}).catch((error) => {
reject(error);
});
});
}));
}