updatePreferences method
//////////// //////////// Updates user preferences
Implementation
// II.F - Preference Management
///////////////
/// Updates user preferences
Future<void> updatePreferences(String uid, Map<String, dynamic> preferences) async {
try {
if (!_isOnline) {
// Get existing preferences from cache to merge
final user = await getUser(uid);
if (user != null) {
final updatedPrefs = {...user.preferences, ...preferences};
// Update cache and track change
_updateCache(uid, {'preferences': updatedPrefs});
_trackPendingChanges(uid, {'preferences': updatedPrefs});
return;
}
}
await _firestore.collection(_collectionPath).doc(uid).update({
'preferences': preferences,
});
// Update cache
if (_userCache.containsKey(uid)) {
final cachedUser = _userCache[uid]!;
final updatedPrefs = {...cachedUser.preferences, ...preferences};
_userCache[uid] = cachedUser.copyWith(preferences: updatedPrefs);
}
} catch (e) {
print('Error updating preferences: $e');
if (e is FirebaseException && e.code == 'unavailable') {
// We're offline, update cache and track for later
if (_userCache.containsKey(uid)) {
final cachedUser = _userCache[uid]!;
final updatedPrefs = {...cachedUser.preferences, ...preferences};
_userCache[uid] = cachedUser.copyWith(preferences: updatedPrefs);
_trackPendingChanges(uid, {'preferences': updatedPrefs});
}
}
rethrow;
}
}