diff --git a/src/controllers/beneficiary.controller.js b/src/controllers/beneficiary.controller.js index ccac3bf..b59d2db 100644 --- a/src/controllers/beneficiary.controller.js +++ b/src/controllers/beneficiary.controller.js @@ -95,6 +95,24 @@ async function getBeneficiary(req, res) { } } +async function deleteBeneficiary(req, res) { + const { beneficiaryAccountNo } = req.params; + try { + await beneficiaryService.deleteBeneficiary(req.user, beneficiaryAccountNo); + res.status(204).send(); + } catch (error) { + if (error.message === 'ACCOUNT_NOT_FOUND') { + logger.warn( + `beneficiary ${beneficiaryAccountNo} does not exist for the customer ${req.user}` + ); + return res.status(400).json({ error: 'INVALID_BENEFICIARY_ACCOUNT_NO' }); + } else { + logger.error(error, 'error deleting beneficiary'); + return res.status(500).json({ error: 'INTERNAL_SERVER_ERROR' }); + } + } +} + async function getIfscDetails(req, res) { const { ifscCode } = req.query; if (!ifscCode) { @@ -127,4 +145,5 @@ module.exports = { addBeneficiary, getIfscDetails, getBeneficiary, + deleteBeneficiary, }; diff --git a/src/routes/beneficiary.route.js b/src/routes/beneficiary.route.js index d1483d8..47e7eba 100644 --- a/src/routes/beneficiary.route.js +++ b/src/routes/beneficiary.route.js @@ -9,5 +9,9 @@ router.get('/validate/outside-bank', beneficiaryController.validateOutsideBank); router.get('/ifsc-details', beneficiaryController.getIfscDetails); router.get('/', beneficiaryController.getBeneficiary); router.post('/', newBeneficiaryValidator, beneficiaryController.addBeneficiary); +router.delete( + '/:beneficiaryAccountNo', + beneficiaryController.deleteBeneficiary +); module.exports = router; diff --git a/src/services/beneficiary.service.js b/src/services/beneficiary.service.js index 136f3d1..1eeb7d1 100644 --- a/src/services/beneficiary.service.js +++ b/src/services/beneficiary.service.js @@ -44,6 +44,16 @@ async function getSingleBeneficiary(customerNo, accountNo) { return result.rows[0]; } +async function deleteBeneficiary(customerNo, beneficiaryAccountNo) { + const queryStr = + 'DELETE FROM beneficiaries WHERE customer_no = $1 AND account_no = $2'; + const result = await db.query(queryStr, [customerNo, beneficiaryAccountNo]); + if (result.rowCount == 0) { + throw new Error('ACCOUNT_NOT_FOUND'); + } + return; +} + async function getAllBeneficiaries(customerNo) { const queryStr = 'SELECT b.account_no, b.name, b.account_type, b.ifsc_code, i.bank_name, i.branch_name FROM beneficiaries b JOIN ifsc_details i ON b.ifsc_code = i.ifsc_code WHERE customer_no = $1'; @@ -66,4 +76,5 @@ module.exports = { validateOutsideBank, getAllBeneficiaries, getSingleBeneficiary, + deleteBeneficiary, };