feat: Api for report of active and inactive users.
This commit is contained in:
@@ -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' });
|
||||
|
||||
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 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;
|
||||
|
||||
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