perf(insights): route daily chart fetches through rollup buckets

The Insights trends row fires three parallel
GET /api/measurements?type=…&aggregate=daily&limit=5000 requests on
mount (BP_SYS / BP_DIA / WEIGHT). The legacy date_trunc path scanned
the measurements table each time — ~3 s per call on Marc's account.

Add a `source=rollup` opt-in on the listMeasurements schema. When set
alongside `aggregate=daily` the route reads from measurement_rollups
DAY buckets instead, swapping a full-table scan for a small indexed
read against the ~5 k-row rollup table. Cumulative HK metrics get
mean * count to reconstruct the daily SUM the chart expects.

The chart-data client opts in for every windowDays > 7 fetch so the
trends row + every sub-page chart benefit. When the rollup returns
zero buckets for the requested window the route falls through to the
live aggregate so brand-new accounts still render their first chart
correctly.
This commit is contained in:
Marc-André Bombeck committed 2026-05-17 12:34:00 +02:00
1 parent 6884995995
commit d2bad6943c
5 files changed
+182 -1

No files matched your search

+6
View File
@@ -2492,6 +2492,12 @@ paths:
- weekly
- monthly
type: string
- in: query
name: source
schema:
enum:
- rollup
type: string
responses:
"200":
content: