plplpl183's picture
Upload apps/api/src/workers/resumeParser.ts
54aa9f3 verified
import { Worker, Job } from 'bullmq';
import { redisClient } from '../server';
import { config } from '../config';
interface ParseJobData {
candidateId: string;
s3Url: string;
fileName: string;
orgId: string;
}
export const resumeWorker = new Worker<ParseJobData>(
'resume-parsing',
async (job: Job<ParseJobData>) => {
const { candidateId, s3Url } = job.data;
console.log(`[Worker] Parsing resume for candidate ${candidateId}: ${s3Url}`);
// Call AI service
const response = await fetch(`${config.AI_SERVICE_URL}/screen`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Internal-Key': config.AI_SERVICE_KEY,
},
body: JSON.stringify({ resume_url: s3Url, candidate_id: candidateId }),
});
if (!response.ok) {
throw new Error(`AI service error: ${response.status}`);
}
const result = await response.json();
console.log(`[Worker] Parsed resume:`, result);
// TODO: update candidate.parsed_data and candidate.embedding in DB
return result;
},
{
connection: redisClient.duplicate(),
concurrency: 5,
}
);
resumeWorker.on('completed', (job) => {
console.log(`[Worker] Job ${job.id} completed`);
});
resumeWorker.on('failed', (job, err) => {
console.error(`[Worker] Job ${job?.id} failed:`, err);
});