const { Worker } = require('bullmq'); const pLimit = require('p-limit'); const worker = new Worker('pdf-bulk-upload', async (job) => { const { batchId, zipBuffer: zipBase64 } = job.data; const zipBuffer = Buffer.from(zipBase64, 'base64'); const zip = new AdmZip(zipBuffer); const entries = zip.getEntries().filter(e => e.entryName.toLowerCase().endsWith('.pdf') && !e.isDirectory ); await redis.hset(`batch:${batchId}`, 'totalFiles', entries.length); await redis.hset(`batch:${batchId}`, 'status', 'PROCESSING'); const limit = pLimit(5); await Promise.all( entries.map(entry => limit(() => processOnePDF(entry.getData(), batchId, redis, db, s3)) ) ); await redis.hset(`batch:${batchId}`, 'status', 'COMPLETED'); }, { connection: redisConnection, concurrency: 1 }); __ __