Files
alpenwerk-hr/app/(app)/employees
Maximilian Stubhan a9bf439624 Collapse sequential query waves, and stop selecting an unshipped column
Against the hosted database a round trip costs about as much as the queries
themselves (~90ms), so page time was dominated by how many waves ran in
sequence rather than by the SQL. Measured with the median of five runs:

- Employee list 244ms -> 101ms. It awaited loadOrgMaps and only then the
  page of employees; the lookup tables are needed to label rows, not to
  build the query, so both now go out together.
- Employee detail 120ms -> 62ms. Nine of the ten queries key off the id
  already in the URL and had no reason to wait for the employee row. The
  manager comes back as an embedded resource on that row instead of a
  follow-up query, which is what makes it one wave rather than two — an
  intermediate version that merely reordered the waves measured *slower*,
  and the embed is the part that actually helps.
- Reports 197ms -> 180ms. Three waves became two. Modest, and worth saying
  so: the snapshot query itself dominates that page, not the wave count.

Also fixes a blank employee list I caused. `absence_type` was added to the
list's explicit column list ahead of its migration, and PostgREST rejects
the *entire* query for one unknown column — so `data` came back null and the
page rendered zero of 809 employees rather than just dropping a chip label.
The column is out of that select until 20260726120000_absence_type.sql is
applied; the detail page selects "*" and shows the kind once it exists.

Verified against the real database rather than by typecheck alone, which is
what would have caught it in the first place.
2026-07-27 08:24:39 +02:00
..