analytics(app): AnalyticsService + lifecycle reconcile + deep-linked notifications (KC-51 ph4a)
Some checks failed
CI / build-and-test (push) Has been cancelled
Some checks failed
CI / build-and-test (push) Has been cancelled
Wires the verified analytics core into the app: AnalyticsService feeds live WorkoutViewModel data into the reconcile coordinator and exposes UI reads; ContentView reconciles on launch + foreground; NotificationManager fires one permission-aware, deduped weekly/monthly report notification carrying an AnalyticsDeepLink, captured on tap for routing. NOT build-verified (no iOS runtime; app-module/SwiftUI deps). Logged in ISSUES.md; historical HealthKit reference + user-scheduled notification time are follow-ups. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -105,6 +105,9 @@ struct ContentView: View {
|
||||
HealthKitManager.shared.bootstrap()
|
||||
NotificationManager.shared.reschedule(workoutVM: workoutVM, taskVM: taskVM)
|
||||
consumeWidgetAddTask()
|
||||
// Backfill any missing analytics reports (idempotent), then notify.
|
||||
let generated = AnalyticsService.shared.reconcile(using: workoutVM)
|
||||
NotificationManager.shared.scheduleAnalyticsReports(generated)
|
||||
// Pull workouts from Health, then reschedule so a detected workout updates reminders.
|
||||
Task {
|
||||
await workoutVM.syncFromHealthKit()
|
||||
@@ -120,6 +123,8 @@ struct ContentView: View {
|
||||
workoutVM.checkPendingMissed()
|
||||
CloudSyncManager.shared.backupSettings()
|
||||
NotificationManager.shared.reschedule(workoutVM: workoutVM, taskVM: taskVM)
|
||||
let generated = AnalyticsService.shared.reconcile(using: workoutVM)
|
||||
NotificationManager.shared.scheduleAnalyticsReports(generated)
|
||||
Task {
|
||||
await workoutVM.syncFromHealthKit()
|
||||
NotificationManager.shared.reschedule(workoutVM: workoutVM, taskVM: taskVM)
|
||||
|
||||
Reference in New Issue
Block a user