From 9bfcb02c25276a16c4f279e19c968339ed23cde2 Mon Sep 17 00:00:00 2001 From: Bert Hausmans Date: Thu, 21 May 2026 07:00:50 +0200 Subject: [PATCH] feat(stats): /lessons-progress and /due routes + heatmap default 52 weeks --- packages/backend/src/routes/stats.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/routes/stats.ts b/packages/backend/src/routes/stats.ts index 7cc232f..7093afd 100644 --- a/packages/backend/src/routes/stats.ts +++ b/packages/backend/src/routes/stats.ts @@ -1,6 +1,9 @@ import { Router } from 'express'; import type { Db } from '../db/client.js'; -import { getCardStats, getHeatmap, getLessonStats, getOverview } from '../services/stats.js'; +import { + getCardStats, getHeatmap, getLessonStats, getOverview, + getLessonsProgress, getDueOverview, +} from '../services/stats.js'; export function statsRouter(db: Db): Router { const r = Router(); @@ -8,6 +11,12 @@ export function statsRouter(db: Db): Router { r.get('/overview', async (req, res, next) => { try { res.json(await getOverview(db, req.user!.id)); } catch (e) { next(e); } }); + r.get('/lessons-progress', async (req, res, next) => { + try { res.json(await getLessonsProgress(db, req.user!.id)); } catch (e) { next(e); } + }); + r.get('/due', async (req, res, next) => { + try { res.json(await getDueOverview(db, req.user!.id)); } catch (e) { next(e); } + }); r.get('/lessons/:id', async (req, res, next) => { try { res.json(await getLessonStats(db, req.user!.id, Number(req.params.id))); } catch (e) { next(e); } }); @@ -16,7 +25,7 @@ export function statsRouter(db: Db): Router { }); r.get('/heatmap', async (req, res, next) => { try { - const weeks = Math.min(52, Math.max(1, Number(req.query.weeks ?? 12))); + const weeks = Math.min(52, Math.max(1, Number(req.query.weeks ?? 52))); res.json(await getHeatmap(db, req.user!.id, weeks)); } catch (e) { next(e); } });