Verify_India_API/src/routes/ifsc.js
2025-12-17 18:16:34 +05:30

90 lines
2.3 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { authenticateApiKey } = require('../middleware/auth');
const { rateLimit } = require('../middleware/rateLimit');
const { query } = require('../database/connection');
const { cacheGet, cacheSet } = require('../cache/redis');
const { logApiCall } = require('../services/analytics');
router.use(authenticateApiKey);
router.use(rateLimit);
router.get('/:ifsc_code', async (req, res, next) => {
const startTime = Date.now();
let success = false;
try {
const { ifsc_code } = req.params;
const ifscRegex = /^[A-Z]{4}0[A-Z0-9]{6}$/;
if (!ifscRegex.test(ifsc_code.toUpperCase())) {
return res.status(400).json({
success: false,
error: { code: 'INVALID_IFSC', message: 'Invalid IFSC format' }
});
}
const ifsc = ifsc_code.toUpperCase();
const cacheKey = `ifsc:${ifsc}`;
let data = await cacheGet(cacheKey);
if (!data) {
const result = await query('SELECT * FROM ifsc_codes WHERE ifsc = $1', [ifsc]);
if (result.rows.length === 0) {
return res.status(404).json({
success: false,
error: { code: 'IFSC_NOT_FOUND', message: 'IFSC not found' }
});
}
data = result.rows[0];
await cacheSet(cacheKey, data, 86400);
}
success = true;
res.json({
success: true,
data: {
ifsc: data.ifsc,
bank: data.bank_name,
branch: data.branch,
address: data.address,
city: data.city,
district: data.district,
state: data.state,
contact: data.contact,
upi: data.upi_enabled,
rtgs: data.rtgs_enabled,
neft: data.neft_enabled,
imps: data.imps_enabled,
micr: data.micr_code,
swift: data.swift_code
},
meta: {
request_id: `req_ifsc_${Date.now()}`,
credits_used: 1,
credits_remaining: req.user.remaining - 1
}
});
} catch (error) {
next(error);
} finally {
await logApiCall({
userId: req.user.id,
apiKeyId: req.user.apiKeyId,
endpoint: '/v1/ifsc',
method: 'GET',
params: { ifsc: req.params.ifsc_code },
status: success ? 200 : 500,
duration: Date.now() - startTime,
success,
isTestKey: req.user.isTestKey
});
}
});
module.exports = router;