fix(worker): canonical-backfill Worker'ını worker.ts'e bağla

Önceki commit'te (7b5e678) src/worker.ts git add kapsamı dışında kaldı
(apps/api/src/jobs/ eklendi ama worker.ts src/ altında). Queue/processor
deploy oldu ama tüketici Worker yoktu → enqueue edilen job'lar 'waiting'de
takıldı. Bu commit Worker instance'ını ekler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 17:02:37 +03:00
parent 7b5e678c55
commit 0ae7c3ceb6

View File

@@ -8,6 +8,7 @@ import Redis from "ioredis";
import OpenAI from "openai";
import postgres from "postgres";
import { QUEUE_NAMES, getBullConnection, getBullTelemetry } from "./jobs/bull.config";
import { processCanonicalBackfill } from "./jobs/processors/canonical-backfill.processor";
import { processEmexScrape } from "./jobs/processors/emex-scrape.processor";
import { processExpertRewards } from "./jobs/processors/expert-rewards.processor";
import { processLifecycleEmails } from "./jobs/processors/lifecycle-email.processor";
@@ -242,6 +243,33 @@ vinpinDecodeWorker.on("failed", (job, err) => {
workers.push(vinpinDecodeWorker);
// Canonical Backfill Worker (maps raw OEM category names → unified taxonomy).
// On-demand only (no cron); a single pass is a big sweep so concurrency 1.
const canonicalBackfillWorker = new Worker(
QUEUE_NAMES.CANONICAL_BACKFILL,
async (job) => {
return processCanonicalBackfill(job, db);
},
{
connection,
concurrency: 1,
...(telemetry ? { telemetry } : {}),
},
);
canonicalBackfillWorker.on("completed", (job) => {
console.log(`[worker] canonical-backfill job ${job.id} completed`);
});
canonicalBackfillWorker.on("failed", (job, err) => {
console.error(`[worker] canonical-backfill job ${job?.id} failed: ${err.message}`);
Sentry.captureException(err, {
tags: { queue: QUEUE_NAMES.CANONICAL_BACKFILL, jobId: job?.id },
});
});
workers.push(canonicalBackfillWorker);
// Translation Worker (async LLM translation for new EMEX/PCAT terms)
const openrouterApiKey = process.env.OPENROUTER_API_KEY;
if (openrouterApiKey) {