feat: Api for report of active and inactive users.
This commit is contained in:
@@ -117,7 +117,9 @@ async function SendOtp(req, res) {
|
|||||||
default:
|
default:
|
||||||
return res.status(400).json({ error: 'Invalid OTP type' });
|
return res.status(400).json({ error: 'Invalid OTP type' });
|
||||||
}
|
}
|
||||||
|
if (message.includes('OTP')) {
|
||||||
|
await setJson(`otp:${mobileNumber}`, otp, 300);
|
||||||
|
}
|
||||||
// Call SMS API
|
// Call SMS API
|
||||||
const response = await axios.post(
|
const response = await axios.post(
|
||||||
'http://localhost:9999/api/SendtoMessage',
|
'http://localhost:9999/api/SendtoMessage',
|
||||||
@@ -126,12 +128,8 @@ async function SendOtp(req, res) {
|
|||||||
stMessage: message,
|
stMessage: message,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
// Save OTP only if it's OTP based (skip notifications without OTP)
|
// Save OTP only if it's OTP based (skip notifications without OTP)
|
||||||
if (message.includes('OTP')) {
|
|
||||||
await setJson(`otp:${mobileNumber}`, otp, 300);
|
|
||||||
}
|
|
||||||
logger.info(`Sent OTP [${otp}] for type [${type}] to ${mobileNumber}`);
|
logger.info(`Sent OTP [${otp}] for type [${type}] to ${mobileNumber}`);
|
||||||
}
|
}
|
||||||
return res.status(200).json({ message: 'Message sent successfully' });
|
return res.status(200).json({ message: 'Message sent successfully' });
|
||||||
|
|||||||
65
src/controllers/report.controller.js
Normal file
65
src/controllers/report.controller.js
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
const reportService = require('../services/report.service');
|
||||||
|
const { logger } = require('../util/logger');
|
||||||
|
|
||||||
|
async function active_users(req, res) {
|
||||||
|
const { from_date, to_date } = req.body;
|
||||||
|
if (!from_date || !to_date) {
|
||||||
|
return res.status(400).json({ error: 'from_date and to_date are required' });
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const users = await reportService.total_users(from_date, to_date);
|
||||||
|
const activeUsers = users.filter(u => u.is_first_login === false);
|
||||||
|
const inactiveUsers = users.filter(u => u.is_first_login === true);
|
||||||
|
const active_user_list = activeUsers.map(u => ({
|
||||||
|
customer_no: u.customer_no,
|
||||||
|
user_name: u.preferred_name,
|
||||||
|
created_at: u.created_at,
|
||||||
|
last_login: u.last_login,
|
||||||
|
status: "active"
|
||||||
|
}));
|
||||||
|
logger.info(`fetch total number of users and active users from date ${from_date} to ${to_date}`);
|
||||||
|
res.json({
|
||||||
|
total_users: users.length,
|
||||||
|
active_users: activeUsers.length,
|
||||||
|
inactive_users: inactiveUsers.length,
|
||||||
|
active_user_list: active_user_list
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(err, 'failed to fetch data');
|
||||||
|
res.status(500).json({ error: 'something went wrong' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function inactive_users(req, res) {
|
||||||
|
const { from_date, to_date } = req.body;
|
||||||
|
if (!from_date || !to_date) {
|
||||||
|
return res.status(400).json({ error: 'from_date and to_date are required' });
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const users = await reportService.total_users(from_date, to_date);
|
||||||
|
const activeUsers = users.filter(u => u.is_first_login === false);
|
||||||
|
const inactiveUsers = users.filter(u => u.is_first_login === true);
|
||||||
|
const inactive_user_list = inactiveUsers.map(u => ({
|
||||||
|
customer_no: u.customer_no,
|
||||||
|
user_name: u.preferred_name,
|
||||||
|
created_at: u.created_at,
|
||||||
|
last_login: u.last_login,
|
||||||
|
status: "in-active"
|
||||||
|
}));
|
||||||
|
logger.info(`fetch total number of users and inactive users from date ${from_date} to ${to_date}`);
|
||||||
|
res.json({
|
||||||
|
total_users: users.length,
|
||||||
|
active_users: activeUsers.length,
|
||||||
|
inactive_users: inactiveUsers.length,
|
||||||
|
inactive_user_list: inactive_user_list
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(err, 'failed to fetch data');
|
||||||
|
res.status(500).json({ error: 'something went wrong' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { active_users ,inactive_users };
|
||||||
@@ -4,6 +4,7 @@ const adminAuthRoute = require('./admin_auth.route');
|
|||||||
const detailsRoute = require('./customer_details.route');
|
const detailsRoute = require('./customer_details.route');
|
||||||
const transactionRoute = require('./transactions.route');
|
const transactionRoute = require('./transactions.route');
|
||||||
const authenticate = require('../middlewares/auth.middleware');
|
const authenticate = require('../middlewares/auth.middleware');
|
||||||
|
const adminAuthenticate = require('../middlewares/admin.middleware');
|
||||||
const transferRoute = require('./transfer.route');
|
const transferRoute = require('./transfer.route');
|
||||||
const beneficiaryRoute = require('./beneficiary.route');
|
const beneficiaryRoute = require('./beneficiary.route');
|
||||||
const neftRoute = require('./neft.route');
|
const neftRoute = require('./neft.route');
|
||||||
@@ -11,6 +12,7 @@ const rtgsRoute = require('./rtgs.route');
|
|||||||
const impsRoute = require('./imps.route');
|
const impsRoute = require('./imps.route');
|
||||||
const { npciResponse } = require('../controllers/npci.controller');
|
const { npciResponse } = require('../controllers/npci.controller');
|
||||||
const otp = require('./otp.route');
|
const otp = require('./otp.route');
|
||||||
|
const reports =require('./report.route');
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@@ -24,6 +26,7 @@ router.use('/payment/rtgs', authenticate, rtgsRoute);
|
|||||||
router.use('/payment/imps', authenticate, impsRoute);
|
router.use('/payment/imps', authenticate, impsRoute);
|
||||||
router.use('/beneficiary', authenticate, beneficiaryRoute);
|
router.use('/beneficiary', authenticate, beneficiaryRoute);
|
||||||
router.use('/npci/beneficiary-response', npciResponse);
|
router.use('/npci/beneficiary-response', npciResponse);
|
||||||
|
router.use('/report',adminAuthenticate,reports);
|
||||||
router.use('/otp', otp);
|
router.use('/otp', otp);
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
9
src/routes/report.route.js
Normal file
9
src/routes/report.route.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
const reportController = require('../controllers/report.controller');
|
||||||
|
const express = require('express');
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.post('/active_users', reportController.active_users);
|
||||||
|
router.post('/in-active_users', reportController.inactive_users);
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
18
src/services/report.service.js
Normal file
18
src/services/report.service.js
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
const db = require('../config/db');
|
||||||
|
const { logger } = require('../util/logger');
|
||||||
|
|
||||||
|
async function total_users(from_date, to_date) {
|
||||||
|
try {
|
||||||
|
const result = await db.query(
|
||||||
|
`SELECT * FROM users WHERE created_at BETWEEN $1 AND $2`,
|
||||||
|
[from_date, to_date]
|
||||||
|
);
|
||||||
|
logger.info("data fetch for users");
|
||||||
|
return result.rows;
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(err, 'failed to fetch data');
|
||||||
|
res.status(500).json({ error: 'something went wrong' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { total_users };
|
||||||
Reference in New Issue
Block a user