import { Worker, type Job } from 'bullmq'; import { env } from '@/lib/env'; import type { ConnectionOptions } from 'bullmq'; import { logger } from '@/lib/logger'; import { attachWorkerAudit } from '@/lib/queue/audit-helpers'; import { QUEUE_CONFIGS } from '@/lib/queue'; /** * Bulk-import worker — DEFERRED FEATURE (placeholder). * * Status: registered with BullMQ so any future enqueue site lands on a * real worker instance instead of disappearing into an unbound queue. * No callers currently dispatch to this worker — the body is intentionally * a no-op that logs the dispatch for forensics. * * Why deferred (vs implemented inline): * - CSV/Excel import is a real product feature, not a refactor. Done * properly it needs: per-entity schema mapping (clients / berths / * interests / companies / yachts), zod-level row validation, per-row * error rollup with line-numbered diagnostics, dry-run preview, * progress reporting, dedupe-on-conflict policy, admin upload UI * with column-mapping UX. Building it speculatively without a * customer in the room would lock in a UX that may not match what * real importers want. * - When the trigger comes (a customer needs to bulk-load a season * roster or migrate from another CRM), build it from product spec * not from this placeholder. * * What's required to ship: papaparse (CSV) + a thin schema-per-entity * mapping layer, plus an admin /admin/import page with a per-entity * picker + file dropzone. The queue registration here stays as-is. */ export const importWorker = new Worker( 'import', async (job: Job) => { logger.info({ jobId: job.id, jobName: job.name }, 'Processing import job'); // Deferred — no callers enqueue this. If a job lands, we log + swallow // so a future test enqueue doesn't trip the failed-job alert. }, { connection: { url: env.REDIS_URL } as ConnectionOptions, concurrency: QUEUE_CONFIGS.import.concurrency, }, ); importWorker.on('failed', (job, err) => { logger.error({ jobId: job?.id, jobName: job?.name, err }, 'Import job failed'); }); attachWorkerAudit(importWorker, 'import');