From 32f6430a5cd7e9c5c8f8de19d604a7fe32c73816 Mon Sep 17 00:00:00 2001 From: asif Date: Thu, 17 Jul 2025 12:32:36 +0530 Subject: [PATCH] added beneficiary routes --- src/controllers/beneficiary.controller.js | 25 +++++++++++++++++++++++ src/routes/beneficiary.route.js | 8 ++++++++ src/routes/index.js | 2 ++ src/services/beneficiary.service.js | 16 +++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 src/controllers/beneficiary.controller.js create mode 100644 src/routes/beneficiary.route.js create mode 100644 src/services/beneficiary.service.js diff --git a/src/controllers/beneficiary.controller.js b/src/controllers/beneficiary.controller.js new file mode 100644 index 0000000..b779c9c --- /dev/null +++ b/src/controllers/beneficiary.controller.js @@ -0,0 +1,25 @@ +const { logger } = require('../util/logger'); +const beneficiaryService = require('../services/beneficiary.service'); + +async function validateWithinBank(req, res) { + const { accountNumber } = req.query; + + if (!accountNumber) { + res.status(400).json({ + error: 'account number is required', + }); + } + + try { + const beneficiaryName = + await beneficiaryService.validateWithinBank(accountNumber); + if (!beneficiaryName) + return res.status(401).json({ error: 'invalid account number' }); + return res.json({ name: beneficiaryName }); + } catch (err) { + logger.error(err, 'beneficiary validation within bank failed'); + res.status(500).json({ error: 'invalid account number' }); + } +} + +module.exports = { validateWithinBank }; diff --git a/src/routes/beneficiary.route.js b/src/routes/beneficiary.route.js new file mode 100644 index 0000000..ed0d214 --- /dev/null +++ b/src/routes/beneficiary.route.js @@ -0,0 +1,8 @@ +const express = require('express'); +const beneficiaryController = require('../controllers/beneficiary.controller'); + +const router = express.Router(); + +router.get('/validate/within-bank', beneficiaryController.validateWithinBank); + +module.exports = router; diff --git a/src/routes/index.js b/src/routes/index.js index 16ac5c8..7a31d85 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -4,6 +4,7 @@ const detailsRoute = require('./customer_details.route'); const transactionRoute = require('./transactions.route'); const authenticate = require('../middlewares/auth.middleware'); const transferRoute = require('./transfer.route'); +const beneficiaryRoute = require('./beneficiary.route'); const router = express.Router(); @@ -11,5 +12,6 @@ router.use('/auth', authRoute); router.use('/customer', authenticate, detailsRoute); router.use('/transactions/account/:accountNo', authenticate, transactionRoute); router.use('/payment/transfer', authenticate, transferRoute); +router.use('/beneficiary', beneficiaryRoute); module.exports = router; diff --git a/src/services/beneficiary.service.js b/src/services/beneficiary.service.js new file mode 100644 index 0000000..512b0b4 --- /dev/null +++ b/src/services/beneficiary.service.js @@ -0,0 +1,16 @@ +const { logger } = require('../util/logger'); + +async function validateWithinBank(accountNo) { + const url = `http://localhost:8687/kccb/cbs/acctInfo/details?stacctno=${accountNo}`; + try { + const response = await fetch(url); + const data = await response.json(); + const customerName = data.customername; + return customerName; + } catch (error) { + logger.error(error, 'error while fetching customer details'); + throw new Error('unable to fetch customer name'); + } +} + +module.exports = { validateWithinBank };