-
Vytor Calixto authoredVytor Calixto authored
downloadDatabase.js 2.41 KiB
const libs = `${process.cwd()}/libs`;
const log = require(`${libs}/log`)(module);
const execute = require(`${libs}/middlewares/query`).execute;
const request = require(`request`);
const config = require(`${libs}/config`);
const Download = require(`${libs}/models/download`);
module.exports = function download(table, mappingTable) {
return (req, res, next) => {
// First, query the mapping
execute(`SELECT target_name, name FROM ${mappingTable}`, undefined, (err, result) => {
if(err) {
log.error(err.stack);
next(new Error('Request could not be satisfied due to a database error.'));
} else {
let header = '';
req.sql.from(table);
result.forEach((field) => {
req.sql.field(table + '.' + field.name, field.target_name);
if(header === '') header += field.target_name;
else header = header + ';' + field.target_name;
});
let form = {
query: req.sql.toString(),
table: req.sql.tableFrom,
name: req.sql.tableFrom,
username: req.user.name,
email: req.user.email,
header
};
request.post(config.cdn.url + '/api/v1/file', {form}, (err, response, body) => {
if(err) {
log.error(err);
return res.json({error: err});
}
Download.findOne({query: req.sql.toString()}, (err, download) => {
if(download) {
download.updatedAt = Date.now();
} else {
download = new Download({
userId: req.user._id,
table,
mappingTable,
query: req.sql.toString()
});
}
download.save((err) => {
if(err) {
log.error(err);
}
res.json({msg: 'Wait for download email', waitForIt: true});
});
});
});
}
});
}
};