258 lines
7.7 KiB
JavaScript
258 lines
7.7 KiB
JavaScript
|
require('dotenv').config();
|
||
|
var express = require('express');
|
||
|
var handlebars = require('express-handlebars');
|
||
|
var bodyParser = require('body-parser');
|
||
|
var cookieParser = require('cookie-parser');
|
||
|
var mult = require('multer');
|
||
|
var upload = mult({ encoding: "utf8" });
|
||
|
var csvtojson = require('csvtojson');
|
||
|
var pg = require('pg');
|
||
|
|
||
|
var server = express();
|
||
|
server.engine('handlebars', handlebars());
|
||
|
server.set('view engine', 'handlebars');
|
||
|
|
||
|
|
||
|
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,
|
||
|
application_name: "tps_etl_api",
|
||
|
ssl: true
|
||
|
})
|
||
|
|
||
|
Postgres.connect();
|
||
|
|
||
|
//-------------------------------------------------------------list source--------------------------------------------------------------------------
|
||
|
|
||
|
server.use("/srce_list", function (inReq, inRes) {
|
||
|
|
||
|
var sql = "SELECT jsonb_agg(defn) source_list FROM tps.srce"
|
||
|
console.log(sql);
|
||
|
|
||
|
Postgres.query(sql, (err, res) => {
|
||
|
inRes.json(res.rows[0]);
|
||
|
console.log("source list request complete");
|
||
|
});
|
||
|
}
|
||
|
);
|
||
|
|
||
|
//-------------------------------------------------------------list maps--------------------------------------------------------------------------
|
||
|
|
||
|
server.use("/map_list", function (inReq, inRes) {
|
||
|
|
||
|
var sql = "SELECT jsonb_agg(regex) regex FROM tps.map_rm"
|
||
|
console.log(sql);
|
||
|
|
||
|
Postgres.query(sql, (err, res) => {
|
||
|
|
||
|
if (err === null) {
|
||
|
inRes.json(res.rows[0]);
|
||
|
return;
|
||
|
}
|
||
|
inRes.json(err.message);
|
||
|
});
|
||
|
}
|
||
|
);
|
||
|
|
||
|
//--------------------------------------------------------list unmapped items flagged to be mapped---------------------------------------------------
|
||
|
|
||
|
server.use("/unmapped", function (inReq, inRes) {
|
||
|
|
||
|
var sql = "SELECT jsonb_agg(row_to_json(x)::jsonb) regex FROM tps.report_unmapped_recs('";
|
||
|
sql += inReq.query.srce + "') x"
|
||
|
console.log(sql);
|
||
|
|
||
|
Postgres.query(sql, (err, res) => {
|
||
|
|
||
|
if (err === null) {
|
||
|
inRes.json(res.rows[0]);
|
||
|
return;
|
||
|
}
|
||
|
inRes.json(err.message);
|
||
|
});
|
||
|
}
|
||
|
);
|
||
|
|
||
|
//-------------------------------------------------------------set source via json in body--------------------------------------------------------------------------
|
||
|
|
||
|
server.use("/srce_set", bodyParser.json(), function (inReq, inRes) {
|
||
|
|
||
|
//validate the body contents before pushing to sql?
|
||
|
var sql = "SELECT x.message FROM tps.srce_set($$";
|
||
|
sql += JSON.stringify( inReq.body);
|
||
|
sql += "$$::jsonb) as x(message)";
|
||
|
console.log(sql);
|
||
|
|
||
|
Postgres.query(sql, (err, res) => {
|
||
|
|
||
|
//Postgres.end();
|
||
|
|
||
|
if (err === null) {
|
||
|
inRes.json(res.rows[0]);
|
||
|
return;
|
||
|
}
|
||
|
inRes.json(err.message);
|
||
|
//handle error
|
||
|
});
|
||
|
}
|
||
|
);
|
||
|
|
||
|
//-------------------------------------------------------------set one or more map definitions--------------------------------------------------------------------------
|
||
|
|
||
|
server.use("/mapdef_set", bodyParser.json(), function (inReq, inRes) {
|
||
|
|
||
|
//validate the body contents before pushing to sql?
|
||
|
var sql = "SELECT x.message FROM tps.srce_map_def_set($$";
|
||
|
sql += JSON.stringify( inReq.body);
|
||
|
sql += "$$::jsonb) as x(message)";
|
||
|
console.log(sql);
|
||
|
|
||
|
Postgres.query(sql, (err, res) => {
|
||
|
|
||
|
//Postgres.end();
|
||
|
|
||
|
if (err === null) {
|
||
|
inRes.json(res.rows[0]);
|
||
|
return;
|
||
|
}
|
||
|
inRes.json(err.message);
|
||
|
//handle error
|
||
|
});
|
||
|
|
||
|
}
|
||
|
);
|
||
|
|
||
|
//-------------------------------------------------------------add entries to lookup table--------------------------------------------------------------------------
|
||
|
|
||
|
server.use("/mapval_set", bodyParser.json(), function (inReq, inRes) {
|
||
|
|
||
|
//validate the body contents before pushing to sql?
|
||
|
var sql = "SELECT x.message FROM tps.map_rv_set($$";
|
||
|
sql += JSON.stringify( inReq.body);
|
||
|
sql += "$$::jsonb) as x(message)";
|
||
|
console.log(sql);
|
||
|
|
||
|
Postgres.query(sql, (err, res) => {
|
||
|
|
||
|
//Postgres.end();
|
||
|
|
||
|
if (err === null) {
|
||
|
inRes.json(res.rows[0]);
|
||
|
return;
|
||
|
}
|
||
|
inRes.json(err.message);
|
||
|
//handle error
|
||
|
});
|
||
|
|
||
|
}
|
||
|
);
|
||
|
|
||
|
/*
|
||
|
send a csv with powershell:
|
||
|
wget -uri http://localhost/import -Method Post -InFile "C:\Users\fleet\Downloads\d.csv"
|
||
|
bash
|
||
|
curl -v -F upload=@//mnt/c/Users/fleet/Downloads/d.csv localhost/import
|
||
|
*/
|
||
|
|
||
|
//-------------------------------------------------------------import data--------------------------------------------------------------------------
|
||
|
|
||
|
server.use("/import", upload.single('upload'), function (inReq, inRes) {
|
||
|
|
||
|
//console.log(inReq.file);
|
||
|
console.log("should have gotten file as post body here");
|
||
|
var csv = inReq.file.buffer.toString('utf8')
|
||
|
// create a new converter object
|
||
|
var c2j = require('csvtojson');
|
||
|
//var jobj = c2j.fromString(csv).
|
||
|
//{headers: "true", delimiter: ",", output: "jsonObj", flatKeys: "true"}
|
||
|
c2j({ flatKeys: "true" }).fromString(csv).then(
|
||
|
(x) => {
|
||
|
//console.log(x);
|
||
|
//inRes.json(x);
|
||
|
|
||
|
//push to db
|
||
|
var sql = "SELECT x.message FROM tps.srce_import($$";
|
||
|
sql += inReq.query.srce;
|
||
|
sql += "$$, $$"
|
||
|
sql += JSON.stringify(x)
|
||
|
sql += "$$::jsonb) as x(message)"
|
||
|
console.log("sql for insert here");
|
||
|
//console.log(sql);
|
||
|
|
||
|
Postgres.query(sql, (err, res) => {
|
||
|
|
||
|
//Postgres.end();
|
||
|
|
||
|
if (err === null) {
|
||
|
inRes.json(res.rows[0]);
|
||
|
Postgres.end();
|
||
|
return;
|
||
|
}
|
||
|
inRes.json(err.message);
|
||
|
//Postgres.end();
|
||
|
//handle error
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
//const jsonArray = csv().fromFile(csvFilePath);
|
||
|
//c2j({ output: "csv" }).fromString(csv).then((jsonObj) => { console.log(jsonObj) });
|
||
|
//validate the body contents before pushing to sql?
|
||
|
);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
//-------------------------------------------------------------suggest source def--------------------------------------------------------------------------
|
||
|
|
||
|
server.use("/csv_suggest", upload.single('upload'), function (inReq, inRes) {
|
||
|
|
||
|
//console.log(inReq.file);
|
||
|
console.log("should have gotten file as post body here");
|
||
|
var csv = inReq.file.buffer.toString('utf8')
|
||
|
// create a new converter object
|
||
|
var c2j = require('csvtojson');
|
||
|
//var jobj = c2j.fromString(csv).
|
||
|
//{headers: "true", delimiter: ",", output: "jsonObj", flatKeys: "true"}
|
||
|
c2j({ flatKeys: "true" }).fromString(csv).then(
|
||
|
(x) => {
|
||
|
//console.log(x);
|
||
|
//inRes.json(x);
|
||
|
|
||
|
//push to db
|
||
|
var sug = {};
|
||
|
for (var key in x[0]) {
|
||
|
if (!isNaN(parseFloat(x[0][key])) && isFinite(x[0][key])) {
|
||
|
if (x[0][key].charAt(0) == "0"){
|
||
|
sug[key] = "text";
|
||
|
}
|
||
|
else {
|
||
|
sug[key] = "numeric";
|
||
|
}
|
||
|
}
|
||
|
else if (Date.parse(x[0][key]) > Date.parse('1950-01-01') && Date.parse(x[0][key]) < Date.parse('2050-01-01')) {
|
||
|
sug[key] = "date";
|
||
|
}
|
||
|
else {
|
||
|
sug[key] = "text";
|
||
|
}
|
||
|
}
|
||
|
console.log(sug);
|
||
|
inRes.json(sug);
|
||
|
//console.log(sql);
|
||
|
}
|
||
|
//const jsonArray = csv().fromFile(csvFilePath);
|
||
|
//c2j({ output: "csv" }).fromString(csv).then((jsonObj) => { console.log(jsonObj) });
|
||
|
//validate the body contents before pushing to sql?
|
||
|
);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
|
||
|
server.get("/", function (inReq, inRes) {
|
||
|
inRes.render("definition", { title: "definition", layout: "main" });
|
||
|
})
|
||
|
|
||
|
module.exports = server;
|