Marc-André Bombeck
899b86f4d4
refactor(workouts): move the batch ingest out of its route
...
postBatch was a 700-line function. The route keeps authentication, the
per-account preference read, the body caps, the rate limit, the parse and
the bridge-source refusal; the ingest moves verbatim into
lib/workouts/batch-ingest/: the first pass (entries), the duplicate probe
and write plan with the manual-correction rules (plan), the transaction
that writes corrections, workouts, tracks and series (write), and the
orchestrator with the audit, record detection, wide event, cache and
arrivals (ingest). The route is 275 lines.
The parity walk recorded before the move is unchanged; the guards that
name the track writer, the Workout writer set and the per-entry
external-id check point at the service files.
2026-10-23 11:39:00 +02:00
..
2026-10-22 08:12:00 +02:00
2026-10-20 09:08:40 +02:00
2026-07-28 21:11:43 +02:00
2026-10-16 03:57:46 +02:00
2026-10-21 22:47:07 +02:00
2026-10-21 21:38:32 +02:00
2026-10-20 09:08:40 +02:00
2026-10-04 10:42:59 +02:00
2026-10-15 21:49:02 +02:00
2026-10-16 03:57:46 +02:00
2026-08-22 13:23:48 +02:00
2026-10-20 09:08:40 +02:00
2026-10-20 09:08:40 +02:00
2026-10-22 08:02:14 +02:00
2026-10-20 09:08:40 +02:00
2026-10-20 09:08:40 +02:00
2026-09-25 21:55:14 +02:00
2026-10-15 23:12:59 +02:00
2026-10-03 18:21:19 +02:00
2026-10-16 03:57:46 +02:00
2026-10-06 19:32:31 +02:00
2026-10-20 09:08:40 +02:00
2026-10-20 16:35:04 +02:00
2026-10-20 09:08:40 +02:00
2026-10-20 09:08:40 +02:00
2026-10-20 09:08:40 +02:00
2026-07-28 14:01:11 +02:00
2026-10-16 03:57:46 +02:00
2026-10-20 09:08:40 +02:00
2026-07-28 21:10:15 +02:00
2026-10-16 03:57:45 +02:00
2026-10-15 21:49:02 +02:00
2026-10-21 15:06:57 +02:00
2026-09-26 14:46:01 +02:00
2026-08-10 05:32:59 +02:00
2026-10-16 03:57:46 +02:00
2026-06-14 13:59:56 +02:00
2026-10-20 09:08:40 +02:00
2026-07-25 18:07:13 +02:00
2026-06-28 16:03:05 +02:00
2026-06-04 21:49:39 +02:00
2026-08-22 12:44:36 +02:00
2026-10-16 03:57:46 +02:00
2026-10-16 03:57:46 +02:00
2026-10-16 03:57:46 +02:00
2026-10-20 16:35:04 +02:00
2026-06-19 22:20:31 +02:00
2026-05-31 14:36:17 +02:00
2026-10-21 12:28:32 +02:00
2026-10-16 03:57:46 +02:00
2026-10-16 03:57:46 +02:00
2026-10-08 11:18:14 +02:00
2026-10-22 14:50:00 +02:00
2026-08-22 12:21:16 +02:00
2026-10-16 06:58:48 +02:00
2026-10-22 01:36:06 +02:00
2026-10-21 23:20:28 +02:00
2026-10-16 00:37:02 +02:00
2026-10-23 08:14:15 +02:00
2026-10-03 18:21:19 +02:00
2026-08-06 03:40:13 +02:00
2026-10-20 09:08:40 +02:00
2026-07-24 02:28:51 +02:00
2026-09-10 19:08:04 +02:00
2026-10-11 12:27:53 +02:00
2026-10-09 13:43:28 +02:00
2026-10-16 05:55:14 +02:00
2026-07-18 16:50:56 +02:00
2026-10-20 09:08:40 +02:00
2026-10-21 15:06:57 +02:00
2026-06-14 23:19:47 +02:00
2026-03-10 20:14:33 +01:00
2026-06-14 23:19:47 +02:00
2026-10-20 13:29:14 +02:00
2026-10-20 09:08:40 +02:00
2026-10-20 09:08:40 +02:00
2026-10-21 23:56:16 +02:00
2026-10-15 21:49:02 +02:00
2026-10-16 03:57:46 +02:00
2026-10-16 03:57:46 +02:00
2026-10-21 19:11:23 +02:00
2026-10-16 03:57:46 +02:00
2026-10-21 13:07:34 +02:00
2026-10-21 21:57:05 +02:00
2026-09-26 15:55:57 +02:00
2026-07-09 21:25:25 +02:00
2026-08-22 13:13:18 +02:00
2026-03-10 20:14:33 +01:00
2026-05-09 02:27:17 +02:00
2026-09-30 22:21:46 +02:00
2026-10-23 08:18:43 +02:00
2026-10-21 20:14:20 +02:00
2026-10-20 13:29:14 +02:00
2026-06-12 08:34:10 +02:00
2026-03-10 20:14:33 +01:00
2026-10-23 11:39:00 +02:00