File size: 1,712 Bytes
92a138e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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 };