Wire reminder scheduler interface into local repository

This commit is contained in:
Rijad Zuzo
2026-02-15 20:16:38 +01:00
parent f1442e89d8
commit 5228799abb
6 changed files with 141 additions and 5 deletions
+15 -1
View File
@@ -7,6 +7,7 @@ import 'package:relationship_saver/features/local/storage/local_data_store.dart'
import 'package:relationship_saver/features/local/storage/local_data_store_hive.dart';
import 'package:relationship_saver/features/local/storage/local_data_store_provider.dart';
import 'package:relationship_saver/features/local/storage/local_data_store_shared_prefs.dart';
import 'package:relationship_saver/features/reminders/scheduling/reminder_scheduler_provider.dart';
import 'package:relationship_saver/features/sync/sync_queue_repository.dart';
import 'package:relationship_saver/integrations/backend/models/backend_models.dart';
import 'package:uuid/uuid.dart';
@@ -41,6 +42,7 @@ class LocalRepository extends AsyncNotifier<LocalDataState> {
if (record == null || record.rawState.isEmpty) {
final LocalDataState seeded = LocalDataState.seed();
await _persist(seeded);
await _reconcileReminderSchedule(seeded);
return seeded;
}
@@ -48,10 +50,13 @@ class LocalRepository extends AsyncNotifier<LocalDataState> {
try {
final Map<String, dynamic> json =
jsonDecode(migrated.rawState) as Map<String, dynamic>;
return LocalDataState.fromJson(json);
final LocalDataState loaded = LocalDataState.fromJson(json);
await _reconcileReminderSchedule(loaded);
return loaded;
} on FormatException {
final LocalDataState fallback = LocalDataState.seed();
await _persist(fallback);
await _reconcileReminderSchedule(fallback);
return fallback;
}
}
@@ -889,6 +894,7 @@ class LocalRepository extends AsyncNotifier<LocalDataState> {
Future<void> _setState(LocalDataState next) async {
state = AsyncData<LocalDataState>(next);
await _persist(next);
await _reconcileReminderSchedule(next);
}
LocalDataState _requireState() {
@@ -908,6 +914,14 @@ class LocalRepository extends AsyncNotifier<LocalDataState> {
);
}
Future<void> _reconcileReminderSchedule(LocalDataState state) async {
try {
await ref.read(reminderSchedulerProvider).reconcile(state.reminders);
} catch (_) {
// Scheduling failures must not block local-first data updates.
}
}
Future<LocalDataRecord> _migrateIfNeeded(LocalDataRecord record) async {
final int currentVersion = record.schemaVersion;
if (currentVersion == _schemaVersion) {