aboutsummaryrefslogtreecommitdiff
path: root/src/lib/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/server')
-rw-r--r--src/lib/server/services/routines.test.ts3
-rw-r--r--src/lib/server/services/routines.ts12
2 files changed, 13 insertions, 2 deletions
diff --git a/src/lib/server/services/routines.test.ts b/src/lib/server/services/routines.test.ts
index e8c4f35..04151c2 100644
--- a/src/lib/server/services/routines.test.ts
+++ b/src/lib/server/services/routines.test.ts
@@ -141,6 +141,9 @@ describe('routines service', () => {
expect(dashboard.routines).toHaveLength(1);
expect(dashboard.routines[0].status).toBe('veryLate');
expect(dashboard.healthScore).toBe(0);
+ const last = dashboard.healthSeries[dashboard.healthSeries.length - 1];
+ expect(last.at).toBe(now);
+ expect(last.health).toBe(dashboard.healthScore);
});
it('overview aggregates per-project health and a global score', async () => {
diff --git a/src/lib/server/services/routines.ts b/src/lib/server/services/routines.ts
index b314d50..ec03c50 100644
--- a/src/lib/server/services/routines.ts
+++ b/src/lib/server/services/routines.ts
@@ -6,7 +6,9 @@ import type { Routine, RoutineCompletion } from './types';
import {
computeRoutineState,
computeHealthScore,
+ computeProjectHealthSeries,
type RoutineState,
+ type HealthPoint,
} from '$lib/shared/routine-metrics';
// ponytail: next routine id via MAX(id)+1, safe enough for a single-user app;
@@ -199,6 +201,7 @@ export async function complete(
export interface ProjectDashboard {
routines: RoutineState[];
healthScore: number;
+ healthSeries: HealthPoint[];
}
export async function loadProjectDashboard(
@@ -219,7 +222,8 @@ export async function loadProjectDashboard(
if (!existing || r.version > existing.version) current.set(r.id, r);
}
const routines_ = [...current.values()].filter((r) => !r.archived);
- if (routines_.length === 0) return { routines: [], healthScore: 100 };
+ if (routines_.length === 0)
+ return { routines: [], healthScore: 100, healthSeries: [] };
const completions = await db
.select()
@@ -232,7 +236,11 @@ export async function loadProjectDashboard(
);
const states = routines_.map((r) => computeRoutineState(r, completions, now));
- return { routines: states, healthScore: computeHealthScore(states) };
+ return {
+ routines: states,
+ healthScore: computeHealthScore(states),
+ healthSeries: computeProjectHealthSeries(routines_, completions, now),
+ };
}
export interface ProjectsOverview {