service fix
This commit is contained in:
@@ -1,2 +1,2 @@
|
|||||||
WRENCHJOB_PORT=3000
|
WRENCHJOB_PORT=3033
|
||||||
WRENCHJOB_POSTGRE_URL='postgresql://wrenchboard:wrenchboard@10.20.30.60:5432/wrenchboard'
|
WRENCHJOB_POSTGRE_URL='postgresql://wrenchboard:wrenchboard@10.20.30.60:5432/wrenchboard'
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
node_modules
|
||||||
|
*.log
|
||||||
|
config.json
|
||||||
|
.queues
|
||||||
|
*.txt
|
||||||
|
docs
|
||||||
+4
-29
@@ -1,20 +1,11 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const properties = require('../package.json')
|
const properties = require('../package.json')
|
||||||
const transaction = require('../service/transaction');
|
const jobs = require('../service/jobs');
|
||||||
const transfer = require('../service/transfer');
|
|
||||||
const account = require('../service/account');
|
|
||||||
|
|
||||||
var controllers = {
|
var controllers = {
|
||||||
about: function(req, res) {
|
getMarketJobs: function(req, res) {
|
||||||
var aboutInfo = {
|
jobs.create(req, res, function(err, dist) {
|
||||||
name: properties.name,
|
|
||||||
version: properties.version
|
|
||||||
}
|
|
||||||
res.json(aboutInfo);
|
|
||||||
},
|
|
||||||
postTransfer: function(req, res) {
|
|
||||||
transfer.create(req, res, function(err, dist) {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
res.send(err);
|
res.send(err);
|
||||||
}
|
}
|
||||||
@@ -22,29 +13,13 @@ var controllers = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
getStatus: function(req, res) {
|
getStatus: function(req, res) {
|
||||||
transfer.get(req, res, function(err, dist) {
|
jobs.get(req, res, function(err, dist) {
|
||||||
if (err) {
|
if (err) {
|
||||||
res.send(err);
|
res.send(err);
|
||||||
}
|
}
|
||||||
res.json(dist);
|
res.json(dist);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
verifyTransaction: function(req, res) {
|
|
||||||
transaction.verify(req, res, function(err, dist) {
|
|
||||||
if (err) {
|
|
||||||
res.send(err);
|
|
||||||
}
|
|
||||||
res.json(dist);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
verifyAccount: function(req, res) {
|
|
||||||
account.verify(req, res, function(err, dist) {
|
|
||||||
if (err) {
|
|
||||||
res.send(err);
|
|
||||||
}
|
|
||||||
res.json(dist);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = controllers;
|
module.exports = controllers;
|
||||||
|
|||||||
+3
-9
@@ -3,14 +3,8 @@
|
|||||||
const controller = require('./controller');
|
const controller = require('./controller');
|
||||||
|
|
||||||
module.exports = function(app) {
|
module.exports = function(app) {
|
||||||
app.route('/about')
|
app.route('/marketjobs')
|
||||||
.get(controller.about);
|
.get(controller.getMarketJobs);
|
||||||
app.route('/create')
|
app.route('/marketjobs/:id')
|
||||||
.post(controller.postTransfer);
|
|
||||||
app.route('/status/:id')
|
|
||||||
.get(controller.getStatus);
|
.get(controller.getStatus);
|
||||||
app.route('/verifyTransaction/:id')
|
|
||||||
.get(controller.verifyTransaction);
|
|
||||||
app.route('/verify')
|
|
||||||
.post(controller.verifyAccount);
|
|
||||||
};
|
};
|
||||||
+1
-1
@@ -13,6 +13,6 @@ services:
|
|||||||
- 9086:3000
|
- 9086:3000
|
||||||
environment:
|
environment:
|
||||||
- PORT=${WRENCHJOB_PORT}
|
- PORT=${WRENCHJOB_PORT}
|
||||||
- WRENCHJOB_POSTGRE_URL=${FLUTTERWAVE_POSTGRE_URL}
|
- POSTGRE_URL=${WRENCHJOB_POSTGRE_URL}
|
||||||
volumes:
|
volumes:
|
||||||
src:
|
src:
|
||||||
+3
-3
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "wrenhboard-job-micro",
|
"name": "wrenhboard-jobs-micro",
|
||||||
"version": "0.0.4",
|
"version": "0.0.1",
|
||||||
"description": "A microservice to handle wrenchboard job listing",
|
"description": "A microservice to handle wrenchboard jobs listing",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"generate-docs": "jsdoc ./api/*.js ./api/**/*.js ./app/*.js ./app/**/*.js ./service/*.js ./service/**/*.js -d docs",
|
"generate-docs": "jsdoc ./api/*.js ./api/**/*.js ./app/*.js ./app/**/*.js ./service/*.js ./service/**/*.js -d docs",
|
||||||
|
|||||||
+9
-146
@@ -1,16 +1,15 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const axios = require('axios');
|
|
||||||
const request = require('request');
|
const request = require('request');
|
||||||
const db = require('../app/db')
|
const db = require('../app/db')
|
||||||
const logger = require('../app/logger');
|
const logger = require('../app/logger');
|
||||||
|
|
||||||
// https://developer.flutterwave.com/reference/create-a-transfer
|
var jobs = {
|
||||||
const flutterwaveConfigBuffer = new Buffer(process.env.FLUTTERWAVE_API, 'base64');
|
getmarketjobs: function(req, res, next) {
|
||||||
const flutterwaveConfig = JSON.parse(flutterwaveConfigBuffer.toString('ascii'));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var transfer = {
|
|
||||||
create: function(req, res, next) {
|
|
||||||
var url = flutterwaveConfig.BaseApiUrl + '/v3/transfers';
|
var url = flutterwaveConfig.BaseApiUrl + '/v3/transfers';
|
||||||
var headersOpt = {
|
var headersOpt = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@@ -21,147 +20,11 @@ var transfer = {
|
|||||||
"account_number": req.body.account_number,
|
"account_number": req.body.account_number,
|
||||||
"amount": req.body.amount,
|
"amount": req.body.amount,
|
||||||
"narration": req.body.narration,
|
"narration": req.body.narration,
|
||||||
"currency": req.body.currency,
|
|
||||||
"reference": req.body.reference,
|
|
||||||
"debit_currency": req.body.debit_currency
|
|
||||||
};
|
};
|
||||||
var options = {
|
|
||||||
headers: headersOpt
|
|
||||||
};
|
|
||||||
logger.info(url);
|
|
||||||
logger.info(options);
|
|
||||||
logger.info(data);
|
logger.info(data);
|
||||||
/*
|
|
||||||
CREATE TABLE flutterwave (
|
|
||||||
id bigserial,
|
|
||||||
money_transfer_id int NOT NULL REFERENCES money_transfer(id),
|
|
||||||
request json NOT NULL,
|
|
||||||
response json NOT NULL,
|
|
||||||
created timestamp DEFAULT NOW(),
|
|
||||||
PRIMARY KEY(id)
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
// Save request in the DB
|
|
||||||
var queryText = 'INSERT INTO flutterwave(money_transfer_id, request) VALUES($1, $2) RETURNING id'
|
|
||||||
db.query(queryText, [req.body.money_transfer_id, data], function(dbErr, result) {
|
|
||||||
if (dbErr) {
|
|
||||||
logger.info('Failed to save request in the DB for money_transfer_id =', req.body.money_transfer_id);
|
|
||||||
logger.info(dbErr);
|
|
||||||
res.send({
|
|
||||||
status: "failure",
|
|
||||||
message: "Failed to save request in the DB!",
|
|
||||||
details: dbErr.message,
|
|
||||||
code: null,
|
|
||||||
data: data
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
var flutterwave_id = result.rows[0].id;
|
|
||||||
logger.info('Request saved int the DB for money_transfer_id =', flutterwave_id);
|
|
||||||
logger.info(result.rows);
|
|
||||||
// https://blog.logrocket.com/5-ways-to-make-http-requests-in-node-js/
|
|
||||||
// https://stackoverflow.com/questions/53846709/how-do-i-use-axios-within-expressjs
|
|
||||||
axios.post(url, data, options)
|
|
||||||
.then(response => {
|
|
||||||
//res.json(response);
|
|
||||||
logger.info('-------------------------------');
|
|
||||||
logger.info(response.data);
|
|
||||||
logger.info('-------------------------------');
|
|
||||||
var json = {
|
|
||||||
status: response.status,
|
|
||||||
statusText: response.statusText,
|
|
||||||
data: response.data
|
|
||||||
};
|
|
||||||
queryText = 'UPDATE flutterwave SET response=$1 WHERE id=$2';
|
|
||||||
db.query(queryText, [json, flutterwave_id], function(dbErr, result) {
|
|
||||||
if (dbErr) {
|
|
||||||
logger.info('Failed to save response in the DB for money_transfer_id =', flutterwave_id);
|
|
||||||
logger.info(dbErr);
|
|
||||||
} else {
|
|
||||||
logger.info('Response saved int the DB for money_transfer_id =', flutterwave_id);
|
|
||||||
logger.info('Updated row count:', result.rowCount);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
res.json(json);
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
// https://stackoverflow.com/questions/45017822/catching-error-body-using-axios-post
|
|
||||||
var errorMessage = err.message;
|
|
||||||
logger.error(err.message);
|
|
||||||
//logger.error(err.stack);
|
|
||||||
//logger.error(err.response.data);
|
|
||||||
//logger.error(err.response.headers);
|
|
||||||
if ( err.request ) {
|
|
||||||
console.log(err.request);
|
|
||||||
// err.request.response
|
|
||||||
errorMessage = err.request;
|
|
||||||
}
|
|
||||||
if( err.response ) {
|
|
||||||
console.log(err.response.data); // => the response payload
|
|
||||||
errorMessage = err.response.data;
|
|
||||||
}
|
|
||||||
queryText = 'UPDATE flutterwave SET response=$1 WHERE id=$2';
|
|
||||||
db.query(queryText, [errorMessage, flutterwave_id], function(dbErr, result) {
|
|
||||||
if (dbErr) {
|
|
||||||
logger.info('Failed to save error response in the DB for money_transfer_id =', flutterwave_id);
|
|
||||||
logger.info(dbErr);
|
|
||||||
} else {
|
|
||||||
logger.info('Error response saved int the DB for money_transfer_id =', flutterwave_id);
|
|
||||||
logger.info('Updated row count:', result.rowCount);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
res.send({
|
|
||||||
status: "failure",
|
|
||||||
message: "Invalid response",
|
|
||||||
details: errorMessage,
|
|
||||||
code: typeof err.response !== 'undefined' ? err.response.status : null,
|
|
||||||
data: typeof err.response !== 'undefined' ? err.response.data : null
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Check DB time stamp (integrity check)
|
|
||||||
db.query('SELECT NOW()', (err, res) => {
|
|
||||||
if (err) {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
logger.info('time:', res.rows[0])
|
|
||||||
});
|
|
||||||
},
|
|
||||||
get: function(req, res, next) {
|
|
||||||
var url = flutterwaveConfig.BaseApiUrl + '/v3/transfers/' + req.params.id;
|
|
||||||
var headersOpt = {
|
|
||||||
"Authorization": "Bearer " + flutterwaveConfig.SecretKey,
|
|
||||||
};
|
|
||||||
var options = {
|
|
||||||
headers: headersOpt
|
|
||||||
};
|
|
||||||
logger.info(url);
|
|
||||||
axios.get(url, options)
|
|
||||||
.then(response => {
|
|
||||||
//res.json(response);
|
|
||||||
logger.info('-------------------------------');
|
|
||||||
logger.info(response.data);
|
|
||||||
logger.info('-------------------------------');
|
|
||||||
var json = {
|
|
||||||
status: response.status,
|
|
||||||
statusText: response.statusText,
|
|
||||||
data: response.data
|
|
||||||
};
|
|
||||||
res.json(json);
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
logger.error(err.message);
|
|
||||||
//logger.error(err.stack);
|
|
||||||
logger.error(err.response.data);
|
|
||||||
//logger.error(err.response.headers);
|
|
||||||
res.send({
|
|
||||||
status: "failure",
|
|
||||||
message: "Invalid response",
|
|
||||||
details: err.message,
|
|
||||||
code: err.response.status,
|
|
||||||
data: err.response.data
|
|
||||||
});
|
|
||||||
});
|
|
||||||
// TODO: Do we save the response in the DB? I assume: YES
|
// TODO: Do we save the response in the DB? I assume: YES
|
||||||
db.query('SELECT NOW()', (err, res) => {
|
db.query('SELECT NOW()', (err, res) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -172,4 +35,4 @@ var transfer = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = transfer;
|
module.exports = jobs;
|
||||||
|
|||||||
Reference in New Issue
Block a user