require('dotenv').config(); const express = require('express'); var bodyParser = require('body-parser'); const server = express(); const pg = require('pg'); //---------read sql files into variables---------------- var fs = require('fs'); var readline = require('readline'); //------------------------------------------------------- var Postgres = new pg.Client({ user: process.env.user, password: process.env.password, host: process.env.host, port: process.env.port, database: process.env.database, ssl: false, application_name: "osm_api" }); Postgres.connect(); Postgres.FirstRow = function (inSQL, args, inResponse) { Postgres.query(inSQL, args, (err, res) => { if (err === null) { inResponse.json(res.rows[0]); return; } inResponse.json(err.stack); }); }; server.get('/scenario_package', bodyParser.json(), function (req, res) { var w = ""; var c = 1; var args = []; for (var i in req.body) { //console.log(i); ///console.log(req.body[i]); if (c > 1) { w = w + ` AND ` } w = w + i + " = '" + req.body[i] + "'"; args.push(req.body[i]); c = c + 1; }; if (c == 1) { res.send("no body was sent"); return; } //console.log(w); //console.log(args); w = ` WITH mseq AS ( SELECT * FROM ( VALUES ('Jun',1) ,('Jul',2) ,('Aug',3) ,('Sep',4) ,('Oct',5) ,('Nov',6) ,('Dec',7) ,('Jan',8) ,('Feb',9) ,('Mar',10) ,('Apr',11) ,('May',12) ) x(m,s) ) --select * from mseq ,base AS ( SELECT order_season ,order_month ,version ,iter ,part_descr ,bill_cust_descr ,ship_cust_descr ,SUM(units) units ,SUM(value_usd) value_usd FROM rlarp.osm_fcpool WHERE `+ w + `GROUP BY order_season ,order_month ,version ,iter ,part_descr ,bill_cust_descr ,ship_cust_descr ) ,months AS ( SELECT order_season ,version ,iter ,order_month ,mseq.s seq ,sum(units) units ,sum(value_usd) value_usd FROM base INNER JOIN mseq ON mseq.m = base.order_month GROUP BY order_season ,version ,iter ,order_month ,s ) ,mpvt AS ( SELECT order_month ,seq ,SUM(units) FILTER (WHERE order_season = 2019) "2019 qty" ,SUM(units) FILTER (WHERE order_season = 2020 AND iter = 'copy') "2020 base qty" ,SUM(units) FILTER (WHERE order_season = 2020 AND iter = 'adjustment') "2020 adj qty" ,SUM(units) FILTER (WHERE order_season = 2020 AND iter IN ('copy','adjustment')) "2020 tot qty" ,SUM(value_usd) FILTER (WHERE order_season = 2019) "2019 value_usd" ,SUM(value_usd) FILTER (WHERE order_season = 2020 AND iter = 'copy') "2020 base value_usd" ,SUM(value_usd) FILTER (WHERE order_season = 2020 AND iter = 'adjustment') "2020 adj value_usd" ,SUM(value_usd) FILTER (WHERE order_season = 2020 AND iter IN ('copy','adjustment')) "2020 tot value_usd" FROM months GROUP BY order_month ,seq ORDER BY seq ASC ) ,mlist AS ( SELECT mseq.m order_month ,"2019 qty" ,"2020 base qty" ,"2020 adj qty" ,"2020 tot qty" ,"2019 value_usd" ,"2020 base value_usd" ,"2020 adj value_usd" ,"2020 tot value_usd" FROM mseq LEFT OUTER JOIN mpvt ON mpvt.order_month = mseq.m ORDER BY mseq.s ASC ) ,totals AS ( SELECT order_season ,version ,iter ,sum(units) units ,sum(value_usd) value_usd FROM months GROUP BY order_season ,version ,iter ) SELECT jsonb_build_object( 'months' ,(SELECT jsonb_agg(row_to_json(months)::jsonb) FROM months) ,'mpvt' ,(SELECT jsonb_agg(row_to_json(mlist)::jsonb) FROM mlist) ,'base' ,(SELECT jsonb_agg(row_to_json(base)::jsonb) FROM base) ,'totals' ,(SELECT jsonb_agg(row_to_json(totals)::jsonb) FROM totals) ) package` console.log(w); Postgres.FirstRow(w, [], res) //res.json("hi") }) server.get('/get_pool', bodyParser.json(), function (req, res) { var args = [req.body.quota_rep]; //------------------------------------------set base SQL------------------------------------ var w = ` WITH rows AS ( SELECT ---------customer info----------------- bill_cust_descr ,billto_group ,ship_cust_descr ,shipto_group ,quota_rep_descr ,director_descr ,segm ,mod_chan ,mod_chansub ---------product info------------------ ,majg_descr ,ming_descr ,majs_descr ,mins_descr ,brand ,part_family ,part_group ,branding ,color ,part_descr ---------dates------------------------- ,order_season ,order_month ,ship_season ,ship_month ,request_season ,request_month ,promo ,version ,iter --------values------------------------- ,sum(value_loc) value_loc ,sum(value_usd) value_usd ,sum(cost_loc) cost_loc ,sum(cost_usd) cost_usd ,sum(units) units FROM rlarp.osm_fcpool WHERE quota_rep_descr = $1 GROUP BY ---------customer info----------------- bill_cust_descr ,billto_group ,ship_cust_descr ,shipto_group ,quota_rep_descr ,director_descr ,segm ,mod_chan ,mod_chansub ---------product info------------------ ,majg_descr ,ming_descr ,majs_descr ,mins_descr ,brand ,part_family ,part_group ,branding ,color ,part_descr ---------dates------------------------- ,order_season ,order_month ,ship_season ,ship_month ,request_season ,request_month ,promo ,version ,iter ) SELECT json_agg(row_to_json(rows)) x FROM rows`; //-----------------replace default quota_rep---------------------------------------------------- console.log(w); Postgres.FirstRow(w, args, res) //res.json("hi") }) server.get('/', (req, res) => res.send('node.js express is running: 🎉')) server.get('/test_sql', function(req, res){ var path = './route_meta/scenario_totals.sql' var callback = function(arg){ res.send(arg) }; fs.readFile(path, 'utf8', function(err, data){ if (!err){ callback(data); } else { callback(err); } }); }); server.listen(3000, () => console.log('started'))