Implement ST-405 server-side day aggregates

This commit is contained in:
Janpeter Visser 2026-04-19 10:33:41 +02:00
parent c5ab2a40e4
commit d99ce03416
5 changed files with 8 additions and 7 deletions

View file

@ -134,6 +134,6 @@ zichtbaar als `NEXT_PUBLIC_ENABLE_TEST_WIZARD=true` staat.
## Eerstvolgende bouwstappen
1. `ST-405` Dagaggregaties server-side implementeren
1. `ST-303` Autocomplete op eerdere activiteiten toevoegen
2. `ST-105` RLS-policy tests en hardening afronden
3. `npm run test` toevoegen aan CI

View file

@ -19,7 +19,6 @@ import { sanitizeNextPath } from "@/lib/auth/navigation";
import { getAuthState } from "@/lib/auth/session";
import { getTodayCheckInForCurrentUser } from "@/lib/check-in/service";
import { getPlanningStatusToast } from "@/lib/feedback/status-messages";
import { calculateDayOverviewSnapshot } from "@/lib/planning/day-overview";
import { getPlanningPageDataForCurrentUser } from "@/lib/planning/service";
import { calculatePlanningMeterSnapshot } from "@/lib/planning/meter";
import { getProfileBundleForCurrentUser } from "@/lib/profile/service";
@ -70,7 +69,6 @@ export default async function PlanningPage({ searchParams }: PlanningPageProps)
planningPageData.activities,
checkInStatus?.todayCheckIn?.dailyBudget ?? null,
);
const dayOverview = calculateDayOverviewSnapshot(planningPageData.activities);
return (
<AppShell contentClassName="space-y-8">
@ -154,7 +152,7 @@ export default async function PlanningPage({ searchParams }: PlanningPageProps)
</aside>
</section>
<DayOverviewCard overview={dayOverview} />
<DayOverviewCard overview={planningPageData.dayOverview} />
<TodayActivitiesList
activities={planningPageData.activities}

View file

@ -92,8 +92,7 @@ Status: `ST-301`, `ST-302`, `ST-304` en `ST-305` zijn inmiddels gerealiseerd in
Doel: de kernloop afronden door geplande activiteiten te evalueren en terug te zien.
Status: `ST-401`, `ST-402`, `ST-403` en `ST-404` zijn inmiddels gerealiseerd in de app. De volgende
logische stap ligt nu in `ST-405`.
Status: `ST-401`, `ST-402`, `ST-403`, `ST-404` en `ST-405` zijn inmiddels gerealiseerd in de app. De evaluatielus voor release 1 is daarmee functioneel rond; de volgende logische stap ligt nu weer in `ST-303` en `EPIC-06`.
| Story ID | Titel | Type | Definition of done |
| --- | --- | --- | --- |
@ -101,7 +100,7 @@ logische stap ligt nu in `ST-405`.
| ST-402 | Evaluatievelden toevoegen | UI | Afgerond: skip-reden en toelichting verschijnen passend per status en worden opgeslagen |
| ST-403 | Ongeplande activiteiten ondersteunen | Build | Afgerond: ongeplande activiteit kan als ad-hoc item worden opgeslagen en telt mee in het dagtotaal |
| ST-404 | Dagoverzicht bouwen | UI | Afgerond: planning toont nu gepland versus werkelijk en een directe statusverdeling van de dag |
| ST-405 | Dagaggregaties server-side implementeren | Logic | Dagtotalen blijven consistent met individuele records |
| ST-405 | Dagaggregaties server-side implementeren | Logic | Afgerond: dagoverzichttotalen worden nu server-side voorbereid via de planningservice en blijven consistent met individuele records |
## EPIC-06 Weekoverzicht en inzichten

View file

@ -1,4 +1,5 @@
import { getAuthenticatedUser } from "@/lib/auth/session";
import { calculateDayOverviewSnapshot } from "@/lib/planning/day-overview";
import type {
ActivityCategory,
CreateAdHocActivitySubmission,
@ -281,6 +282,7 @@ export async function getPlanningPageDataForCurrentUser(): Promise<PlanningPageD
categories,
skipReasons,
activities: activitiesStatus?.activities ?? [],
dayOverview: calculateDayOverviewSnapshot(activitiesStatus?.activities ?? []),
};
}

View file

@ -4,6 +4,7 @@ import {
ACTIVITY_SOURCE_VALUES,
ACTIVITY_STATUS_VALUES,
} from "@/lib/planning/options";
import type { DayOverviewSnapshot } from "@/lib/planning/day-overview";
export type ActivitySource = (typeof ACTIVITY_SOURCE_VALUES)[number];
export type ActivityStatus = (typeof ACTIVITY_STATUS_VALUES)[number];
@ -83,4 +84,5 @@ export type PlanningPageData = {
categories: ActivityCategory[];
skipReasons: SkipReason[];
activities: ActivityRecord[];
dayOverview: DayOverviewSnapshot;
};