integrated acct statement with date range filter
This commit is contained in:
@@ -21,5 +21,27 @@ async function getLastTen(accountNumber) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async function getFiltered(accountNumber, fromDate, toDate) {
|
||||||
module.exports = { getLastTen };
|
try {
|
||||||
|
const response = await axios.get(
|
||||||
|
`http://localhost:8688/kccb/cbs/montlyacctstmt/details`,
|
||||||
|
{
|
||||||
|
params: { stacctno: accountNumber, fromdate: fromDate, todate: toDate },
|
||||||
|
}
|
||||||
|
);
|
||||||
|
const transactions = response.data;
|
||||||
|
const processedTransactions = transactions.map((tx) => ({
|
||||||
|
id: tx.stTransactionNumber,
|
||||||
|
name: tx.stTransactionDesc,
|
||||||
|
date: tx.stTransactionDate,
|
||||||
|
amount: tx.stTransactionAmount.slice(0, -3),
|
||||||
|
type: tx.stTransactionAmount.slice(-2),
|
||||||
|
}));
|
||||||
|
return processedTransactions;
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(
|
||||||
|
'API call failde: ' + (error.response?.data?.message || error.message)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
module.exports = { getLastTen, getFiltered };
|
||||||
|
@@ -3,15 +3,44 @@ const { logger } = require('../util/logger');
|
|||||||
|
|
||||||
const transactionsRoute = async (req, res) => {
|
const transactionsRoute = async (req, res) => {
|
||||||
const accountNo = req.params.accountNo;
|
const accountNo = req.params.accountNo;
|
||||||
|
const { fromDate, toDate } = req.query;
|
||||||
|
let data;
|
||||||
try {
|
try {
|
||||||
const data = await transactionsController.getLastTen(accountNo);
|
if (fromDate && toDate) {
|
||||||
|
if (!isValidDDMMYYYY(fromDate) || !isValidDDMMYYYY(toDate)) {
|
||||||
|
return res.status(400).json({ error: 'INVALID_DATE_FORMAT' });
|
||||||
|
}
|
||||||
|
data = await transactionsController.getFiltered(
|
||||||
|
accountNo,
|
||||||
|
fromDate,
|
||||||
|
toDate
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
data = await transactionsController.getLastTen(accountNo);
|
||||||
|
}
|
||||||
return res.json(data);
|
return res.json(data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('error retriving last 10 txns', error);
|
logger.error('error retriving transaction history', error);
|
||||||
return res
|
return res
|
||||||
.status(500)
|
.status(500)
|
||||||
.json({ message: 'error occured while fetching transactions' });
|
.json({ message: 'error occured while fetching transactions' });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function isValidDDMMYYYY(dateStr) {
|
||||||
|
if (!/^\d{8}$/.test(dateStr)) return false;
|
||||||
|
|
||||||
|
const day = parseInt(dateStr.slice(0, 2), 10);
|
||||||
|
const month = parseInt(dateStr.slice(2, 4), 10);
|
||||||
|
const year = parseInt(dateStr.slice(4), 10);
|
||||||
|
|
||||||
|
const date = new Date(year, month - 1, day);
|
||||||
|
|
||||||
|
return (
|
||||||
|
date.getFullYear() === year &&
|
||||||
|
date.getMonth() === month - 1 &&
|
||||||
|
date.getDate() === day
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = transactionsRoute;
|
module.exports = transactionsRoute;
|
||||||
|
Reference in New Issue
Block a user