Save transfer request/response to DB

This commit is contained in:
ChiefSoft works
2022-06-05 04:35:33 +00:00
parent 37b8a3bd4e
commit 971dc7a2b2
+140 -90
View File
@@ -10,96 +10,146 @@ const flutterwaveConfigBuffer = new Buffer(process.env.FLUTTERWAVE_API, 'base64'
const flutterwaveConfig = JSON.parse(flutterwaveConfigBuffer.toString('ascii')); const flutterwaveConfig = JSON.parse(flutterwaveConfigBuffer.toString('ascii'));
var transfer = { var transfer = {
create: function(req, res, next) { 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",
"Authorization": "Bearer " + flutterwaveConfig.SecretKey, "Authorization": "Bearer " + flutterwaveConfig.SecretKey,
}; };
var data = { var data = {
"account_bank": req.body.account_bank, "account_bank": req.body.account_bank,
"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, "currency": req.body.currency,
"reference": req.body.reference, "reference": req.body.reference,
"debit_currency": req.body.debit_currency "debit_currency": req.body.debit_currency
}; };
var options = { var options = {
headers: headersOpt headers: headersOpt
}; };
logger.info(url); logger.info(url);
logger.info(options); logger.info(options);
logger.info(data); logger.info(data);
// 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 CREATE TABLE flutterwave (
axios.post(url, data, options) id bigserial,
.then(response => { money_transfer_id int NOT NULL REFERENCES money_transfer(id),
//res.json(response); request json NOT NULL,
logger.info('-------------------------------'); response json NOT NULL,
logger.info(response.data); created timestamp DEFAULT NOW(),
logger.info('-------------------------------'); PRIMARY KEY(id)
res.json({ );
status: response.status, */
statusText: response.statusText, // Save request in the DB
data: response.data 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) {
.catch(err => { logger.info('Failed to save request in the DB for money_transfer_id =', flutterwave_id);
logger.error(err.message); logger.info(dbErr);
//logger.error(err.stack); res.send({
//logger.error(err.response.data); status: "failure",
//logger.error(err.response.headers); message: "Failed to save request in the DB!",
res.send({ details: dbErr.message,
status: "failure", code: null,
message: "Invalid response", data: data
details: err.message, });
code: typeof err.response !== 'undefined' ? err.response.status : null, } else {
data: typeof err.response !== 'undefined' ? err.response.data : null var flutterwave_id = result.rows[0].id;
}); logger.info('Request saved int the DB for money_transfer_id =', flutterwave_id);
}); logger.info(result.rows);
// TODO: Do we save the response in the DB? I assume: YES // https://blog.logrocket.com/5-ways-to-make-http-requests-in-node-js/
db.query('SELECT NOW()', (err, res) => { // https://stackoverflow.com/questions/53846709/how-do-i-use-axios-within-expressjs
if (err) { axios.post(url, data, options)
throw err; .then(response => {
} //res.json(response);
logger.info('time:', res.rows[0]) logger.info('-------------------------------');
}); logger.info(response.data);
}, logger.info('-------------------------------');
get: function(req, res, next) { var json = {
var url = flutterwaveConfig.BaseApiUrl + '/v3/transfers/' + req.params.id; status: response.status,
var headersOpt = { statusText: response.statusText,
"Authorization": "Bearer " + flutterwaveConfig.SecretKey, data: response.data
}; };
var options = { queryText = 'UPDATE flutterwave SET response=$1 WHERE id=$2';
headers: headersOpt db.query(queryText, [json, flutterwave_id], function(dbErr, result) {
}; if (dbErr) {
logger.info(url); logger.info('Failed to save response in the DB for money_transfer_id =', flutterwave_id);
axios.get(url, options) logger.info(dbErr);
.then(data => { } else {
res.json(data); logger.info('Response saved int the DB for money_transfer_id =', flutterwave_id);
}) logger.info('Updated row count:', result.rowCount);
.catch(err => { }
logger.error(err.message); });
//logger.error(err.stack); res.json(json);
logger.error(err.response.data); })
//logger.error(err.response.headers); .catch(err => {
res.send({ logger.error(err.message);
status: "failure", //logger.error(err.stack);
message: "Invalid response", //logger.error(err.response.data);
details: err.message, //logger.error(err.response.headers);
code: err.response.status, queryText = 'UPDATE flutterwave SET response=$1 WHERE id=$2';
data: err.response.data db.query(queryText, [err, flutterwave_id], function(dbErr, result) {
}); if (dbErr) {
}); logger.info('Failed to save error response in the DB for money_transfer_id =', flutterwave_id);
// TODO: Do we save the response in the DB? I assume: YES logger.info(dbErr);
db.query('SELECT NOW()', (err, res) => { } else {
if (err) { logger.info('Error response saved int the DB for money_transfer_id =', flutterwave_id);
throw err; logger.info('Updated row count:', result.rowCount);
} }
logger.info('time:', res.rows[0]) });
}); res.send({
} status: "failure",
message: "Invalid response",
details: err.message,
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(data => {
res.json(data);
})
.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
db.query('SELECT NOW()', (err, res) => {
if (err) {
throw err;
}
logger.info('time:', res.rows[0])
});
}
}; };
module.exports = transfer; module.exports = transfer;