Files
HealthLog/src/lib/query-keys/settings.ts
T
Marc-André Bombeck 0160052289 refactor(settings): retire Research Mode — the switch governed nothing
Research Mode was the opt-in behind the estimated GLP-1 drug-level curve:
turn it on, read a disclaimer, get the chart. The chart stopped consulting
the flag several releases ago and has painted for every account since, so
the switch on Settings → Advanced changed no screen in either position. An
inert control that promises to hide a chart is worse than no control.

The curve is simply part of the medication page now. Gone with the switch:
the acknowledgment dialog, `/api/auth/me/research-mode`, the shared status
DTO and its gate helper, the disclaimer-version stamp, the query key, and
the three user columns the acknowledgment wrote (migration 0321). The
Privacy page's second button pointed at the retired control and goes too.

Settings → Advanced is now what it reads as: reset the data, delete the
account.
2026-08-08 15:17:05 +02:00

75 lines
3.1 KiB
TypeScript

/**
* Query keys — settings + notification surfaces, version/meta reads,
* gamification, share links, and feature flags.
* Part of the centralized factory; aggregated in `./index.ts`.
*/
export const settingsKeys = {
gamificationAchievements: () => ["gamification", "achievements"] as const,
notificationsPreferences: () => ["notifications", "preferences"] as const,
notificationsStatus: () => ["notifications", "status"] as const,
settingsGlobalServices: () => ["settings", "global-services"] as const,
settingsNtfy: () => ["settings", "ntfy"] as const,
/** v1.17.1 — generic-webhook channel config. */
settingsWebhook: () => ["settings", "webhook"] as const,
/** v1.17.1 — SMTP / email channel config. */
settingsEmail: () => ["settings", "email"] as const,
settingsReminderThresholds: () =>
["settings", "reminder-thresholds"] as const,
/** v1.8.5 — user-level injection-site preferences (global exclusion). */
injectionSitePrefs: () => ["settings", "injection-site-prefs"] as const,
/**
* The declared diabetes opt-in behind `GET/PATCH /api/auth/me/diabetes`.
* Selects which reference band glucose readings are judged against, so the
* toggle also invalidates `insightsTargets()` — the resolved band rides
* on that payload.
*/
diabetesPref: () => ["settings", "diabetes"] as const,
/**
* v1.18.0 — the per-user module enable/disable map behind
* `GET/PATCH /api/auth/me/modules`. Used as the Module-hub mutation key;
* the resolved map itself rides on `authMe()` (the `/auth/me` payload),
* so the toggle mutation invalidates `authMe()` to re-gate the nav,
* Insights pills, and dashboard tiles in lockstep.
*/
modulesPrefs: () => ["settings", "modules"] as const,
/**
* v1.35.0 — which pillars count toward the Health Score, behind
* `GET/PATCH /api/auth/me/health-score-config`. Its own cell rather than
* a slice of `authMe()`: the payload carries the optimistic-concurrency
* token the save echoes, and folding it into the account payload would
* make every unrelated profile write advance the token.
*/
healthScoreConfig: () => ["settings", "health-score-config"] as const,
apiVersion: () => ["api", "version"] as const,
publicVersion: () => ["public", "version"] as const,
/** v1.15.12 H1 — admin overview "update available" check against the
* latest GitHub release tag (best-effort, day-stale). */
versionUpdateCheck: () => ["version", "update-check"] as const,
/**
* v1.23 — the Data & Privacy dashboard's read-only retention + encryption
* summary behind `GET /api/settings/privacy-summary`.
*/
privacySummary: () => ["settings", "privacy-summary"] as const,
/** v1.11.0 — owner's clinician share links (Settings → Sharing). */
shareLinks: () => ["share-links"] as const,
featureFlags: () => ["feature-flags"] as const,
/**
* The account's standing AI consent receipt (`GET /api/consent/ai/latest`).
* Keyed by kind because the endpoint answers per kind and a shared key
* across kinds would serve one kind's receipt for another.
*/
aiConsentReceipt: (kind: string) =>
["consent", "ai", "latest", kind] as const,
};