feat: Api for report of active and inactive users.

This commit is contained in:
2025-11-10 12:06:46 +05:30
parent 689b00aec7
commit 1ebe666bb3
5 changed files with 98 additions and 5 deletions

View File

@@ -117,7 +117,9 @@ async function SendOtp(req, res) {
default:
return res.status(400).json({ error: 'Invalid OTP type' });
}
if (message.includes('OTP')) {
await setJson(`otp:${mobileNumber}`, otp, 300);
}
// Call SMS API
const response = await axios.post(
'http://localhost:9999/api/SendtoMessage',
@@ -126,12 +128,8 @@ async function SendOtp(req, res) {
stMessage: message,
}
);
if (response.data) {
// 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}`);
}
return res.status(200).json({ message: 'Message sent successfully' });

View 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 };

View File

@@ -4,6 +4,7 @@ const adminAuthRoute = require('./admin_auth.route');
const detailsRoute = require('./customer_details.route');
const transactionRoute = require('./transactions.route');
const authenticate = require('../middlewares/auth.middleware');
const adminAuthenticate = require('../middlewares/admin.middleware');
const transferRoute = require('./transfer.route');
const beneficiaryRoute = require('./beneficiary.route');
const neftRoute = require('./neft.route');
@@ -11,6 +12,7 @@ const rtgsRoute = require('./rtgs.route');
const impsRoute = require('./imps.route');
const { npciResponse } = require('../controllers/npci.controller');
const otp = require('./otp.route');
const reports =require('./report.route');
const router = express.Router();
@@ -24,6 +26,7 @@ router.use('/payment/rtgs', authenticate, rtgsRoute);
router.use('/payment/imps', authenticate, impsRoute);
router.use('/beneficiary', authenticate, beneficiaryRoute);
router.use('/npci/beneficiary-response', npciResponse);
router.use('/report',adminAuthenticate,reports);
router.use('/otp', otp);
module.exports = router;

View 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;

View 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 };