mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 05:12:14 +00:00
The Zod validators + the engine + the worker accept the new v1.5 fields. The API route handlers didn't — they silently dropped `startsOn` / `endsOn` / `oneShot` / `timesOfDay` / `rrule` / `rollingIntervalDays` / `reminderGraceMinutes` before the Prisma write. This commit threads them through. ### Route invariants - One-shot consistency: `oneShot === true` ⇒ at most one schedule (422 otherwise), that schedule has neither `rrule` nor `rollingIntervalDays`, and `endsOn` is auto-normalised to equal `startsOn` on write. - Recurring default: when `oneShot !== true` and the incoming schedule has no `rrule` / `rollingIntervalDays` / legacy `daysOfWeek`, the route stamps `rrule = "FREQ=DAILY"` so the worker always sees a clean shape. - Backwards compat: empty / absent `timesOfDay` is server-side populated from `windowStart` so the engine always sees a non-empty array, and legacy iOS v0.6.x clients that still post the `windowStart` / `windowEnd` / `daysOfWeek` shape keep working unchanged. ### Tests 9 new cases across both route test files (7 POST + 3 PUT, one POST as a 7b subcase): one-shot create persistence, RRULE persistence, rollingIntervalDays persistence, one-shot + recurrence → 422, one-shot + multiple schedules → 422, PUT endsOn updates, legacy POST back-fills timesOfDay, legacy POST with no recurrence hints stamps daily. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>