import { Router } from 'express'; import type { Db } from '../db/client.js'; import { getCardStats, getHeatmap, getLessonStats, getOverview, getLessonsProgress, getDueOverview, } from '../services/stats.js'; export function statsRouter(db: Db): Router { const r = 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); } }); r.get('/cards/:id', async (req, res, next) => { try { res.json(await getCardStats(db, req.user!.id, Number(req.params.id))); } catch (e) { next(e); } }); r.get('/heatmap', async (req, res, next) => { try { 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); } }); return r; }