Add reminder notifications to schedules

- ScheduleDocument/Schedule gain optional reminderMinutes (minutes from
  midnight; decode-compatible, no schema bump)
- New Workout form gets a Reminder section (toggle + time picker, hidden
  for Now; footer warns when notifications are denied)
- ReminderPlanner (pure, tested) derives notification triggers: daily
  repeating, per-weekday repeating for fixed days, one-shot for once
- ReminderScheduler resyncs pending requests from the cache on every
  change, multiplexed onto onCacheChanged after the watch push; asks
  notification permission only once a reminder actually exists
This commit is contained in:
2026-07-11 12:32:08 -04:00
parent df07e0a043
commit 5ec5de9295
10 changed files with 440 additions and 3 deletions
+4
View File
@@ -377,6 +377,10 @@ struct ScheduleDocument: Codable, Sendable, Equatable, Identifiable {
var recurrence: String // ScheduleRecurrence raw value
var weekdays: [Int]? // Calendar weekday numbers 1 (Sun) 7 (Sat); .fixedDays only
var date: Date? = nil // the one-off day; .once only
/// Reminder time as minutes from midnight (local wall-clock, 01439); nil = no
/// reminder. Optional addition decode-compatible, deliberately NOT schema-bumped
/// (an older app dropping it on rewrite loses only a notification preference).
var reminderMinutes: Int? = nil
var order: Int
var createdAt: Date
var updatedAt: Date