Resume / backend /src /controllers /importController.js
AFAautomation's picture
Initial commit with LFS enabled
92a138e
Raw
History Blame Contribute Delete
1.71 kB
const { v4: uuidv4 } = require('uuid');
const { getDb } = require('../config/database');
const { extractResumeData } = require('../services/extractionService');
const logger = require('../config/logger');
async function uploadAndImport(req, res) {
if (!req.file) return res.status(400).json({ success: false, message: 'No file uploaded' });
const db = await getDb();
const jobId = uuidv4();
await db.run('INSERT INTO import_jobs (id, user_id, source_type, status) VALUES (?, ?, ?, ?)',
jobId, req.user.id, req.file.mimetype, 'processing'
);
// Background processing
extractResumeData(req.file.path, req.file.mimetype)
.then(async (data) => {
await db.run('UPDATE import_jobs SET status = ?, extracted = ?, updated_at = datetime("now") WHERE id = ?',
'completed', JSON.stringify(data), jobId
);
logger.info(`Import job ${jobId} completed`);
})
.catch(async (err) => {
await db.run('UPDATE import_jobs SET status = ?, error = ?, updated_at = datetime("now") WHERE id = ?',
'failed', err.message, jobId
);
logger.error(`Import job ${jobId} failed: ${err.message}`);
});
return res.json({ success: true, jobId, message: 'File uploaded and processing started' });
}
async function getJobStatus(req, res) {
const db = await getDb();
const job = await db.get('SELECT * FROM import_jobs WHERE id = ? AND user_id = ?', req.params.id, req.user.id);
if (!job) return res.status(404).json({ success: false, message: 'Job not found' });
return res.json({
success: true,
job: {
...job,
extracted: JSON.parse(job.extracted || '{}')
}
});
}
module.exports = { uploadAndImport, getJobStatus };