From 6129b6fd3b02f3111b894a4b65c34321c432440a Mon Sep 17 00:00:00 2001 From: Samuel Enocsson Date: Thu, 21 May 2026 13:49:30 +0200 Subject: [PATCH] feat: wire computeKpis into the page render (#5) --- src/routes/pages.js | 5 ++++- src/services/player-service.js | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/routes/pages.js b/src/routes/pages.js index cb22d9f..61d3c8d 100644 --- a/src/routes/pages.js +++ b/src/routes/pages.js @@ -1,10 +1,13 @@ const express = require('express'); const router = express.Router(); const { getTopbarLocals } = require('../services/topbar-service'); +const { getAllRatingsFromDB, computeKpis } = require('../services/player-service'); router.get('/', async (req, res) => { 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) => { diff --git a/src/services/player-service.js b/src/services/player-service.js index 523016d..f73f7f8 100644 --- a/src/services/player-service.js +++ b/src/services/player-service.js @@ -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 = { getPlayerDataFromDB, scrapePDGARating, getPredictedRatingFromDB, getAllRatingsFromDB, - refreshAllPlayersInDB + refreshAllPlayersInDB, + computeKpis };