-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxlsx-handler.js
68 lines (58 loc) · 2.64 KB
/
xlsx-handler.js
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
const XLSX = require('xlsx');
const Parse = require('parse/node');
const _ = require('lodash');
const util = require('./util');
const moveCnadidateFromLocalToMain = util.moveCnadidateFromLocalToMain;
const moveRecruitersFromLocalToMain = util.moveRecruitersFromLocalToMain;
module.exports = async function xlsxHandler(data, dbCv, dbMain) {
try {
console.log(`xlsxHandler() ->`);
const initial_data_arrays = await Parse.Cloud.run('getInititalDataArrays', {});
console.log('xlsxHandler: initial data arrays obtained');
const workbook = XLSX.readFile(data.filepath);
if (workbook.SheetNames.some(name => name.toLowerCase().includes('recruiters'))) {
console.log('xlsxHandler: Recruiters sheet detected');
const secondSheetName = workbook.SheetNames[0];
let recruiters = await XLSX.utils.sheet_to_json(workbook.Sheets[secondSheetName]);
console.log('xlsxHandler: xlsx parsed to json');
console.log(recruiters.length); //debug
const chunk_size = 10;
recruiters = _.chunk(recruiters, chunk_size);
console.log(recruiters.length); //debug
for (let i = 0; i < recruiters.length; i++) {
await Parse.Cloud.run('saveXlsxRecruiters', {
recruiters: recruiters[i],
initial_data_arrays: initial_data_arrays,
});
console.log(`xlsxHandler: parsed recruiters[${i}] to local DB`);
}
console.log('xlsxHandler: parsed all recruiters to local DB');
await moveRecruitersFromLocalToMain(dbCv, dbMain);
console.log('xlsxHandler: moved Recruiters From LocalDB To MainDB');
return;
}
const firstSheetName = workbook.SheetNames[0];
let candidates = await XLSX.utils.sheet_to_json(workbook.Sheets[firstSheetName]);
console.log('xlsxHandler: xlsx parsed to json');
console.log(`xlsxHandler: Quantity of candidates to be imported: ${candidates.length}`);
const chunk_size = 10;
candidates = _.chunk(candidates, chunk_size);
const clientId = data.clientId;
const funcName = 'saveXlsxCandidates';
for (let i = 0; i < candidates.length; i++) {
let candidatesChunked = candidates[i];
let promisesCandidates = [];
for (let j = 0; j < candidatesChunked.length; j++) {
const email = candidatesChunked[j].Email;
promisesCandidates.push(moveCnadidateFromLocalToMain(candidatesChunked[j], email, clientId, initial_data_arrays, funcName, dbCv, dbMain));
}
await Promise.all(promisesCandidates);
console.log(promisesCandidates);
const timeout = ms => new Promise(res => setTimeout(res, ms))
await timeout(200);
}
} catch (err) {
console.error(err);
return err;
}
}