71 lines
2.7 KiB
JavaScript
71 lines
2.7 KiB
JavaScript
const nocodbService = require('../services/nocodb');
|
|
const logger = require('../utils/logger');
|
|
const config = require('../config');
|
|
|
|
class DashboardController {
|
|
async getStats(req, res) {
|
|
try {
|
|
// Get all locations for support level stats
|
|
const locationsResponse = await nocodbService.getAll(config.nocodb.tableId);
|
|
const locations = locationsResponse.list || [];
|
|
|
|
// Calculate support level distribution
|
|
const supportLevels = { '1': 0, '2': 0, '3': 0, '4': 0 };
|
|
let signRequests = 0;
|
|
|
|
locations.forEach(loc => {
|
|
if (loc['Support Level']) {
|
|
supportLevels[loc['Support Level']]++;
|
|
}
|
|
if (loc.Sign || loc.sign) {
|
|
signRequests++;
|
|
}
|
|
});
|
|
|
|
// Calculate overall score (weighted average)
|
|
const totalResponses = Object.values(supportLevels).reduce((a, b) => a + b, 0);
|
|
const weightedScore = (supportLevels['1'] * 4 + supportLevels['2'] * 3 +
|
|
supportLevels['3'] * 2 + supportLevels['4'] * 1) /
|
|
(totalResponses || 1);
|
|
|
|
// Get user stats
|
|
const usersResponse = await nocodbService.getAll(config.nocodb.loginSheetId);
|
|
const users = usersResponse.list || [];
|
|
|
|
// Get daily entry counts for the last 30 days
|
|
const thirtyDaysAgo = new Date();
|
|
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
|
|
|
|
const dailyEntries = {};
|
|
locations.forEach(loc => {
|
|
const createdAt = new Date(loc.CreatedAt || loc.created_at);
|
|
if (createdAt >= thirtyDaysAgo) {
|
|
const dateKey = createdAt.toISOString().split('T')[0];
|
|
dailyEntries[dateKey] = (dailyEntries[dateKey] || 0) + 1;
|
|
}
|
|
});
|
|
|
|
res.json({
|
|
success: true,
|
|
data: {
|
|
supportLevels,
|
|
signRequests,
|
|
totalLocations: locations.length,
|
|
overallScore: weightedScore.toFixed(2),
|
|
totalUsers: users.length,
|
|
dailyEntries
|
|
}
|
|
});
|
|
|
|
} catch (error) {
|
|
logger.error('Error fetching dashboard stats:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Failed to fetch dashboard statistics'
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = new DashboardController();
|