Skip to content

Instantly share code, notes, and snippets.

@lkatney
Last active July 28, 2018 21:43
Show Gist options
  • Select an option

  • Save lkatney/4e5c05df5e4a6fb5d61ea22cbb35712a to your computer and use it in GitHub Desktop.

Select an option

Save lkatney/4e5c05df5e4a6fb5d61ea22cbb35712a to your computer and use it in GitHub Desktop.

Revisions

  1. Lakshay Katney revised this gist Jul 28, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions server.js
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    var express = require("express"),
    var express = require("express"), //express version 3.4.1
    app = express(),
    pg = require("pg"),
    pg = require("pg"), //pg version 6.0.1
    path = require("path"),
    crud = require('./crud.operations');

  2. Lakshay Katney created this gist Jul 28, 2018.
    147 changes: 147 additions & 0 deletions crud.operations.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,147 @@
    var pgClient;

    exports.setConnection = function(client){
    pgClient = client;
    }

    /*************************************************************************
    *************************** CRUD OPERTIONS ***************************
    ************************************************************************/
    exports.getRecords = function(objectApiName, config, callback){
    var params = prepareReadParams(config);
    var query = 'SELECT * FROM salesforce.'+objectApiName;

    if(params.where){
    query += ' WHERE ' + params.where;
    }

    runQuery(query, params.vals, objectApiName , callback);
    };


    exports.saveRecord = function(objectApiName, body, callback){
    var params = prepareInsertParams(body);
    var query = 'INSERT INTO salesforce.'+objectApiName;

    if(params.fields){
    query += '('+params.fields+') VALUES(' + params.numbers + ') RETURNING *';
    }

    runQuery(query, params.vals, objectApiName , callback);
    };

    exports.editRecord = function(objectApiName, config, body, callback){
    var params = prepareUpdateParams(body, config);
    var query = 'UPDATE salesforce.'+objectApiName;

    if(params.set){
    query += ' SET ' + params.set;
    }

    if(params.where){
    query += ' WHERE ' + params.where;
    }

    runQuery(query, params.vals, objectApiName , callback);
    };

    exports.deleteRecord = function(objectApiName, IdToDelete, callback){
    var config = { Id : IdToDelete };
    var params = prepareReadParams(config);
    var query = 'DELETE FROM salesforce.'+objectApiName;

    if(params.where){
    query += ' WHERE ' + params.where;
    }

    runQuery(query, params.vals, objectApiName , callback);
    };

    function prepareUpdateParams(config, findWith){
    var vals = [];
    var set = '';
    var where = '';
    var counter = 1;
    if(config !== {}){
    for(var key in config){
    if(key != '__proto__'){
    set += set != '' ? ', ' + key +'=($'+counter + ')' : key +'=($'+counter + ')';
    vals.push(config[key]);
    counter++;
    }
    }
    }

    if(findWith !== {}){
    for(var key in findWith){
    where += where != '' ? ' AND '+ key + ' = ($'+ counter + ')': key + ' = ($'+ counter + ')';
    vals.push(findWith[key]);
    }
    }

    return {where : where, vals : vals, set : set};
    }

    function prepareReadParams(config){
    var vals = [];
    var where = '';
    if(config !== {}){
    var counter = 1;
    for(var key in config){
    where += where != '' ? ' AND '+ key + ' = $'+ counter : key + ' = $'+ counter;
    vals.push(config[key]);
    counter++;
    }
    }
    return {where : where, vals : vals};
    }

    function prepareInsertParams(config){
    var vals = [];
    var fields = '';
    var numbers = '';
    if(config !== {}){
    var counter = 1;
    for(var key in config){
    fields += fields != '' ? ',' + key : key;
    numbers += numbers != ''? ',' + '$' + counter : '$'+counter;
    vals.push(config[key]);
    counter++;
    }
    }
    return {fields : fields, numbers: numbers, vals : vals};
    }

    function runQuery(query, vals, type, callback){
    console.log('-->query', query);
    console.log('-->vals', vals);
    pgClient.query(query, vals, function(err, result){
    var res, error;
    if(!err){
    if(result.rows.length > 0){
    res = result.rows;
    }else{
    res = [];
    }
    }else{
    console.log('-->error', err);
    error = err;
    }
    callback(prepareResponse(error, res));
    });
    };


    function prepareResponse(err, result){
    var response = {success : false, data : ''};
    if (err){
    response.success = false;
    response.data = 'Error: ' + err;
    }
    else{
    response.success = true;
    response.data = result;
    }

    return response;
    }
    81 changes: 81 additions & 0 deletions server.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,81 @@
    var express = require("express"),
    app = express(),
    pg = require("pg"),
    path = require("path"),
    crud = require('./crud.operations');


    app.set("port", (process.env.PORT || 5000));

    /*
    * PG Client connection
    */
    pg.defaults.ssl = true;

    var dbString = process.env.DATABASE_URL;

    var sharedPgClient;

    pg.connect(dbString, function(err,client){
    if(err){
    console.error("PG Connection Error")
    }
    console.log("Connected to Postgres");
    crud.setConnection(client);
    });

    /*
    * ExpressJS View Templates
    */
    app.set("views", path.join(__dirname, "./app/views"));
    app.set("view engine", "ejs");

    app.get("/accounts",function(req, res){
    crud.getRecords('account', {Industry: 'IT'}, function(result){
    if(result.success){
    res.render("index.ejs", {result: result.data});
    }else{
    console.log(result);
    }
    });
    });

    app.post("/account",function(req, res){
    var body = req.body; // this is body : {name: 'New Acme', Industry : 'IT'};
    crud.saveRecord('account', body , function(result){
    if(result.success){
    res.render("index.ejs", {result: result.data});
    }else{
    console.log(result);
    }
    });
    });

    app.post("/account/:id",function(req, res){
    var body = req.body; // this is body : {id: 'sfid', name: 'Update Acme', Industry : 'IT'};
    var findWith = {id : body.id};
    crud.editRecord('account', body , findWith, function(result){
    if(result.success){
    res.render("index.ejs", {result: result.data});
    }else{
    console.log(result);
    }
    });
    });

    app.deleteRecord("/account/:id",function(req, res){
    crud.deleteRecord('account', req.params.id , function(result){
    if(result.success){
    res.render("index.ejs", {result: result.data});
    }else{
    console.log(result);
    }
    });
    });

    /*
    * Run Server
    */
    var server = app.listen(app.get('port'), function(){
    console.log('Node Connect App Running at http://%s:%s', server.address().address, server.address().port);
    });