Spaces:
Running
Running
| 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 }; | |