90 lines
2.3 KiB
JavaScript
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;
|