diff --git a/src/controllers/neft.controller.js b/src/controllers/neft.controller.js new file mode 100644 index 0000000..92ae32d --- /dev/null +++ b/src/controllers/neft.controller.js @@ -0,0 +1,37 @@ +const axios = require('axios'); +const { logger } = require('../util/logger'); + +async function send( + fromAccount, + toAccount, + amount, + ifscCode, + beneficiaryName, + remitterName +) { + try { + const response = await axios.post( + 'http://localhost:8690/kccb/Neftfundtransfer', + { + stFromAcc: fromAccount, + stToAcc: toAccount, + stTranAmt: amount, + stCommission: 0, + stIfscCode: ifscCode, + stFullName: remitterName, + stBeneName: beneficiaryName, + stAddress1: '', + stAddress2: '', + stAddress3: '', + } + ); + return response.data; + } catch (error) { + logger.error(error); + throw new Error( + 'API call failed: ' + (error.response?.data?.message || error.message) + ); + } +} + +module.exports = { send }; diff --git a/src/routes/index.js b/src/routes/index.js index 11473ec..68fb683 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -5,6 +5,7 @@ const transactionRoute = require('./transactions.route'); const authenticate = require('../middlewares/auth.middleware'); const transferRoute = require('./transfer.route'); const beneficiaryRoute = require('./beneficiary.route'); +const neftRoute = require('./neft.route.js'); const { npciResponse } = require('../controllers/npci.controller'); const router = express.Router(); @@ -13,6 +14,7 @@ router.use('/auth', authRoute); router.use('/customer', authenticate, detailsRoute); router.use('/transactions/account/:accountNo', authenticate, transactionRoute); router.use('/payment/transfer', authenticate, transferRoute); +router.use('/payment/neft', authenticate, neftRoute); router.use('/beneficiary', authenticate, beneficiaryRoute); router.use('/npci/beneficiary-response', npciResponse); diff --git a/src/routes/neft.route.js b/src/routes/neft.route.js new file mode 100644 index 0000000..317478c --- /dev/null +++ b/src/routes/neft.route.js @@ -0,0 +1,49 @@ +const express = require('express'); +const neftController = require('../controllers/neft.controller'); +const { logger } = require('../util/logger'); +const neftValidator = require('../validators/neft.validator.js'); +const paymentSecretValidator = require('../validators/payment.secret.validator'); + +const router = express.Router(); +router.use(neftValidator, paymentSecretValidator); + +const neftRoute = async (req, res) => { + const { + fromAccount, + toAccount, + ifscCode, + amount, + beneficiaryName, + remitterName, + } = req.body; + + try { + const result = await neftController.send( + fromAccount, + toAccount, + amount, + ifscCode, + beneficiaryName, + remitterName + ); + logger.info(result); + + if (result.status.startsWith('O.K.')) { + const utr = result.status.slice(9, 25); + return res.json({ message: 'SUCCESS', utr }); + } else if (result.status.includes('INSUFFICIENT FUNDS')) { + return res.status(422).json({ error: 'INSUFFICIENT_FUNDS' }); + } else if (result.status.include('INVALID CHECK DIGIT')) { + return res.status(400).json({ error: 'INVALID_ACCOUNT_NUMBER' }); + } else { + return res.status(400).json({ error: 'PROBLEM_TRANSFERRING_FUNDS' }); + } + } catch (error) { + logger.error(error, 'error occured while doing NEFT transaction'); + return res.status(500).json({ error: 'INTERNAL_SERVER_ERROR' }); + } +}; + +router.post('/', neftRoute); + +module.exports = router;