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; }