87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
const path = require("path");
|
|
require("dotenv").config({
|
|
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
|
|
});
|
|
const client = require("../graphql-client/graphql-client").client;
|
|
const emailer = require("../email/sendemail");
|
|
const moment = require("moment-timezone");
|
|
const converter = require("json-2-csv");
|
|
const logger = require("../utils/logger");
|
|
|
|
exports.taskHandler = async (req, res) => {
|
|
try {
|
|
const { query, variables, text, to, subject, timezone } = req.body;
|
|
|
|
//Check the variables to see if they are an object.
|
|
Object.keys(variables).forEach((key) => {
|
|
if (typeof variables[key] === "object") {
|
|
if (variables[key].function) {
|
|
variables[key] = functionMapper(variables[key].function, timezone);
|
|
}
|
|
}
|
|
});
|
|
|
|
const response = await client.request(query, variables);
|
|
const rootElement = response[Object.keys(response)[0]]; //This element should always be an array.
|
|
|
|
const csv = converter.json2csv(rootElement, { emptyFieldValue: "" });
|
|
|
|
emailer
|
|
.sendTaskEmail({
|
|
to,
|
|
subject,
|
|
text,
|
|
attachments: [{ filename: "query.csv", content: csv }]
|
|
})
|
|
.catch((error) => {
|
|
logger.log("Tasks - Error sending CSV EMAIL", "error", req?.user?.email, null, {
|
|
error
|
|
});
|
|
});
|
|
|
|
return res.status(200).send(csv);
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message, stack: error.stack });
|
|
}
|
|
};
|
|
|
|
const isoFormat = "YYYY-MM-DD";
|
|
|
|
function functionMapper(f, timezone) {
|
|
switch (f) {
|
|
case "date.today":
|
|
return moment().tz(timezone).format(isoFormat);
|
|
case "date.now":
|
|
return moment().tz(timezone);
|
|
case "date.yesterday":
|
|
return moment().tz(timezone).subtract(1, "day").format(isoFormat);
|
|
case "date.3daysago":
|
|
return moment().tz(timezone).subtract(3, "day").format(isoFormat);
|
|
case "date.7daysago":
|
|
return moment().tz(timezone).subtract(7, "day").format(isoFormat);
|
|
case "date.tomorrow":
|
|
return moment().tz(timezone).add(1, "day").format(isoFormat);
|
|
case "date.3daysfromnow":
|
|
return moment().tz(timezone).add(3, "day").format(isoFormat);
|
|
case "date.7daysfromnow":
|
|
return moment().tz(timezone).add(7, "day").format(isoFormat);
|
|
case "date.yesterdaytz":
|
|
return moment().tz(timezone).subtract(1, "day");
|
|
case "date.3daysagotz":
|
|
return moment().tz(timezone).subtract(3, "day");
|
|
case "date.7daysagotz":
|
|
return moment().tz(timezone).subtract(7, "day");
|
|
case "date.tomorrowtz":
|
|
return moment().tz(timezone).add(1, "day");
|
|
case "date.3daysfromnowtz":
|
|
return moment().tz(timezone).add(3, "day");
|
|
case "date.7daysfromnowtz":
|
|
return moment().tz(timezone).add(7, "day");
|
|
|
|
case "date.now":
|
|
return moment().tz(timezone);
|
|
default:
|
|
return f;
|
|
}
|
|
}
|