refactor: Optimisation de la gestion des événements dans le cache et suppression des appels API redondants

This commit is contained in:
ElPoyo
2026-02-18 15:22:14 +01:00
parent bc6d7d4542
commit 506225ac62
4 changed files with 71 additions and 40 deletions

View File

@@ -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');