Save transfer request/response to DB
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user