refactor: Optimisation de la gestion des événements dans le cache et suppression des appels API redondants
This commit is contained in:
@@ -237,8 +237,16 @@ class EventProvider with ChangeNotifier {
|
||||
/// Ajouter un nouvel événement
|
||||
Future<void> addEvent(EventModel event) async {
|
||||
try {
|
||||
// L'événement est créé via l'API dans le service
|
||||
await refreshEvents(_lastUserId ?? '', canViewAllEvents: _lastCanViewAll);
|
||||
// Ajouter l'événement localement dans _events
|
||||
_events.add(event);
|
||||
|
||||
// Ajouter dans le cache par mois
|
||||
final monthKey = '${event.startDateTime.year}-${event.startDateTime.month.toString().padLeft(2, '0')}';
|
||||
if (_eventsByMonth.containsKey(monthKey)) {
|
||||
_eventsByMonth[monthKey]!.add(event);
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error adding event: $e');
|
||||
rethrow;
|
||||
@@ -248,10 +256,34 @@ class EventProvider with ChangeNotifier {
|
||||
/// Mettre à jour un événement
|
||||
Future<void> updateEvent(EventModel event) async {
|
||||
try {
|
||||
// Mise à jour locale immédiate
|
||||
// Mise à jour dans _events
|
||||
final index = _events.indexWhere((e) => e.id == event.id);
|
||||
if (index != -1) {
|
||||
final oldEvent = _events[index];
|
||||
_events[index] = event;
|
||||
|
||||
// Mettre à jour dans le cache par mois
|
||||
final oldMonthKey = '${oldEvent.startDateTime.year}-${oldEvent.startDateTime.month.toString().padLeft(2, '0')}';
|
||||
final newMonthKey = '${event.startDateTime.year}-${event.startDateTime.month.toString().padLeft(2, '0')}';
|
||||
|
||||
// Si le mois a changé, supprimer de l'ancien et ajouter au nouveau
|
||||
if (oldMonthKey != newMonthKey) {
|
||||
if (_eventsByMonth.containsKey(oldMonthKey)) {
|
||||
_eventsByMonth[oldMonthKey]!.removeWhere((e) => e.id == event.id);
|
||||
}
|
||||
if (_eventsByMonth.containsKey(newMonthKey)) {
|
||||
_eventsByMonth[newMonthKey]!.add(event);
|
||||
}
|
||||
} else {
|
||||
// Même mois, juste mettre à jour
|
||||
if (_eventsByMonth.containsKey(newMonthKey)) {
|
||||
final monthIndex = _eventsByMonth[newMonthKey]!.indexWhere((e) => e.id == event.id);
|
||||
if (monthIndex != -1) {
|
||||
_eventsByMonth[newMonthKey]![monthIndex] = event;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -264,7 +296,19 @@ class EventProvider with ChangeNotifier {
|
||||
Future<void> deleteEvent(String eventId) async {
|
||||
try {
|
||||
await _dataService.deleteEvent(eventId);
|
||||
|
||||
// Trouver l'événement pour obtenir sa date avant de le supprimer
|
||||
final eventToDelete = _events.firstWhere((e) => e.id == eventId);
|
||||
final monthKey = '${eventToDelete.startDateTime.year}-${eventToDelete.startDateTime.month.toString().padLeft(2, '0')}';
|
||||
|
||||
// Supprimer de _events
|
||||
_events.removeWhere((event) => event.id == eventId);
|
||||
|
||||
// Supprimer du cache par mois
|
||||
if (_eventsByMonth.containsKey(monthKey)) {
|
||||
_eventsByMonth[monthKey]!.removeWhere((event) => event.id == eventId);
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error deleting event: $e');
|
||||
|
||||
Reference in New Issue
Block a user