addSavedDestination method
//////////// //////////// Adds a saved destination for a user
Implementation
// II.D - Destination Management
///////////////
/// Adds a saved destination for a user
Future<void> addSavedDestination(String uid, Map<String, dynamic> destinationData) async {
try {
// Check if we're offline first
if (!_isOnline) {
// Get current user from cache
final user = await getUser(uid);
if (user != null) {
// Add to cached destinations
final newDestinations = List<Map<String, dynamic>>.from(user.savedDestinations);
newDestinations.add(destinationData);
// Update cache and track change
_updateCache(uid, {'savedDestinations': newDestinations});
_trackPendingChanges(uid, {'savedDestinations': FieldValue.arrayUnion([destinationData])});
return; // Return early, change will sync when online
}
}
// Online path
await _firestore.collection(_collectionPath).doc(uid).update({
'savedDestinations': FieldValue.arrayUnion([destinationData]),
});
// Update cache
_updateCacheForArrayOperation(uid, 'savedDestinations', destinationData, isAddition: true);
} catch (e) {
print('Error adding saved destination: $e');
if (e is FirebaseException && e.code == 'unavailable') {
// We're offline, add to cache and track changes
await getUser(uid); // Ensure user is in cache
_updateCacheForArrayOperation(uid, 'savedDestinations', destinationData, isAddition: true);
_trackPendingChanges(uid, {'savedDestinations': FieldValue.arrayUnion([destinationData])});
} else {
rethrow;
}
}
}