const Dinero = require("dinero.js"); const queries = require("../graphql-client/queries"); const { job } = require("../scheduling/scheduling-job"); const GraphQLClient = require("graphql-request").GraphQLClient; const logger = require("../utils/logger"); const _ = require("lodash"); // Dinero.defaultCurrency = "USD"; // Dinero.globalLocale = "en-CA"; exports.partsScan = async function (req, res) { const BearerToken = req.headers.authorization; const { jobid } = req.body; logger.log("job-parts-scan", "DEBUG", req.user?.email, jobid, null); const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, { headers: { Authorization: BearerToken, }, }); try { //Query all jobline data using the user's authorization. const data = await client .setHeaders({ Authorization: BearerToken }) .request(queries.QUERY_PARTS_SCAN, { id: jobid, }); //Create RegExps once for better performance. const IdsToMarkCritical = []; const RegExpressions = data.jobs_by_pk.bodyshop.md_parts_scan.map( (r) => new RegExp(r.expression, r.flags) ); //Check each line against each regex rule. data.jobs_by_pk.joblines.forEach((jobline) => { RegExpressions.forEach((rExp) => { if (jobline.line_desc.match(rExp)) { IdsToMarkCritical.push(jobline); } }); }); const result = await client .setHeaders({ Authorization: BearerToken }) .request(queries.UPDATE_PARTS_CRITICAL, { IdsToMarkCritical: _.uniqBy(IdsToMarkCritical, "id").map((i) => i.id), jobid: jobid, }); res.status(200).json(result); } catch (error) { logger.log("job-parts-scan-error", "ERROR", req.user.email, jobid, { jobid, error, }); res.status(400).json(JSON.stringify(error)); } };