feat: wire computeKpis into the page render (#5)

This commit is contained in:
Samuel Enocsson
2026-05-21 13:49:30 +02:00
parent 3dcd3131a0
commit 6129b6fd3b
2 changed files with 25 additions and 2 deletions
+4 -1
View File
@@ -1,10 +1,13 @@
const express = require('express'); const express = require('express');
const router = express.Router(); const router = express.Router();
const { getTopbarLocals } = require('../services/topbar-service'); const { getTopbarLocals } = require('../services/topbar-service');
const { getAllRatingsFromDB, computeKpis } = require('../services/player-service');
router.get('/', async (req, res) => { router.get('/', async (req, res) => {
const topbar = await getTopbarLocals(); const topbar = await getTopbarLocals();
res.render('index', { activePage: 'players', ...topbar }); const players = await getAllRatingsFromDB();
const kpis = computeKpis(players);
res.render('index', { activePage: 'players', kpis, ...topbar });
}); });
router.get('/courses', async (req, res) => { router.get('/courses', async (req, res) => {
+21 -1
View File
@@ -292,10 +292,30 @@ async function refreshAllPlayersInDB(progressCallback = null) {
} }
} }
/**
* Aggregates KPI summary stats from an already-fetched player array.
* All fields are derived from the player list — no extra DB queries.
*/
function computeKpis(players) {
const active = players.filter(p => p.rating != null && p.rating > 0);
const avg = active.length > 0
? Math.round(active.reduce((sum, p) => sum + p.rating, 0) / active.length)
: null;
return {
tracked: players.length,
active: active.length,
avg,
climbing: players.filter(p => p.ratingChange != null && p.ratingChange > 0).length,
slipping: players.filter(p => p.ratingChange != null && p.ratingChange < 0).length
};
}
module.exports = { module.exports = {
getPlayerDataFromDB, getPlayerDataFromDB,
scrapePDGARating, scrapePDGARating,
getPredictedRatingFromDB, getPredictedRatingFromDB,
getAllRatingsFromDB, getAllRatingsFromDB,
refreshAllPlayersInDB refreshAllPlayersInDB,
computeKpis
}; };