feat(vaccinations): publish the routes, classify them, gate the module

- four route files: list and create, read and edit and delete, restore,
  and the link pair; every delegable one is classified as health
  background, in each leg of the sharing guard, with its reason written
- link and unlink stay bare, consistent with the document and visit link
  routes; the three are revisited as one decision
- vaccinations becomes the nineteenth module key, default-on and
  surface-gated like medications: the data routes stay exempt so a
  restore keeps working and re-enabling finds every dose intact
- a delegate's dose entries get their own sentence in the owner's
  activity view rather than reading as a generic change
This commit is contained in:
Marc-André Bombeck committed 2026-08-08 14:27:36 +02:00
1 parent 4dc3b1aa27
commit 7ac81f3eed
20 files changed
+853 -3

No files matched your search

+33
View File
@@ -400,6 +400,39 @@ export const ADMITTED_MUTATING_HANDLERS = [
"manage",
"restore",
),
// v1.38.0 — the immunization log.
handler(
"app/api/vaccinations/route.ts",
"/api/vaccinations",
"POST",
"profile",
"write",
"create",
),
handler(
"app/api/vaccinations/[id]/route.ts",
"/api/vaccinations/[id]",
"PATCH",
"profile",
"manage",
"update",
),
handler(
"app/api/vaccinations/[id]/route.ts",
"/api/vaccinations/[id]",
"DELETE",
"profile",
"manage",
"delete",
),
handler(
"app/api/vaccinations/[id]/restore/route.ts",
"/api/vaccinations/[id]/restore",
"POST",
"profile",
"manage",
"restore",
),
handler(
"app/api/illness/episodes/[id]/day-logs/route.ts",
"/api/illness/episodes/[id]/day-logs",
@@ -31,6 +31,7 @@ const MODULES = {
inboundDocuments: true,
mentalHealth: true,
nutrients: true,
vaccinations: true,
} as const;
/** The dense path is about pulse and glucose; nothing else is in scope here. */
@@ -335,6 +335,7 @@ describe("doctor-report — module enable/disable gating", () => {
inboundDocuments: true,
mentalHealth: true,
nutrients: true,
vaccinations: true,
} as const;
it("includes every module's data when all modules are enabled", async () => {