Files
gyanBuddy/controller/Dashboard.js
T
Gitea d7b8b99095
Deploy Node App / deploy (push) Successful in 15s
dashboar changes
2026-06-16 12:21:36 +05:30

110 lines
2.4 KiB
JavaScript

const postgre = require('../database/postgre');
const analytics = async (req, res) => {
try {
const query = `
SELECT
'24h' AS period,
COUNT(DISTINCT session_id) AS sessions,
COUNT(*) FILTER (WHERE status = 1) AS chats,
COUNT(DISTINCT user_id) AS users,
COUNT(*) AS queries
FROM useraskquestion
WHERE created >= NOW() - INTERVAL '24 hours'
UNION ALL
SELECT
'7d',
COUNT(DISTINCT session_id),
COUNT(*) FILTER (WHERE status = 1),
COUNT(DISTINCT user_id),
COUNT(*)
FROM useraskquestion
WHERE created >= NOW() - INTERVAL '7 days'
UNION ALL
SELECT
'30d',
COUNT(DISTINCT session_id),
COUNT(*) FILTER (WHERE status = 1),
COUNT(DISTINCT user_id),
COUNT(*)
FROM useraskquestion
WHERE created >= NOW() - INTERVAL '30 days'
UNION ALL
SELECT
'all',
COUNT(DISTINCT session_id),
COUNT(*) FILTER (WHERE status = 1),
COUNT(DISTINCT user_id),
COUNT(*)
FROM useraskquestion;
`;
const result = await postgre.query(query);
const response = {};
result.rows.forEach(row => {
response[row.period] = {
sessions: Number(row.sessions),
chats: Number(row.chats),
users: Number(row.users),
queries: Number(row.queries),
};
});
return res.status(200).json({
success: true,
data: response,
});
} catch (error) {
console.error("Analytics Error:", error);
return res.status(500).json({
success: false,
message: error.message,
});
}
};
const analyticsLast7Days = async (req, res) => {
try {
const query = `
SELECT
DATE(created) AS date,
COUNT(DISTINCT session_id) AS sessions,
COUNT(*) FILTER (WHERE status = 1) AS chats,
COUNT(DISTINCT user_id) AS users,
COUNT(*) AS queries
FROM useraskquestion
WHERE created >= CURRENT_DATE - INTERVAL '6 days'
GROUP BY DATE(created)
ORDER BY DATE(created);
`;
const result = await postgre.query(query);
return res.status(200).json({
success: true,
data: result.rows
});
} catch (error) {
console.error("Analytics Error:", error);
return res.status(500).json({
success: false,
message: error.message
});
}
};
module.exports = {
analyticsLast7Days,analytics
};