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(); if(download.userId != req.user._id) { let dl = new Download({ userId: req.user._id, table, name: req.query.name, mappingTable, query: req.sql.toString() }); console.log(dl); dl.save((err) => { if(err) log.error(err); }); } } else { download = new Download({ userId: req.user._id, table, name: req.query.name, mappingTable, query: req.sql.toString() }); console.log(download); } download.save((err) => { if(err) { log.error(err); } res.json({msg: 'Wait for download email', waitForIt: true}); }); }); }); } }); } };