/// Gestionnaire de cache pour le dashboard /// Cache intelligent basé sur les rôles utilisateurs library dashboard_cache_manager; import 'dart:async'; import 'package:flutter/foundation.dart'; import '../models/user_role.dart'; /// Gestionnaire de cache pour optimiser les performances du dashboard class DashboardCacheManager { static final Map _cache = {}; static final Map _cacheTimestamps = {}; static const Duration _cacheExpiry = Duration(minutes: 15); /// Invalide le cache pour un rôle spécifique static Future invalidateForRole(UserRole role) async { final keysToRemove = _cache.keys .where((key) => key.startsWith('dashboard_${role.name}')) .toList(); for (final key in keysToRemove) { _cache.remove(key); _cacheTimestamps.remove(key); } debugPrint('🗑️ Cache invalidé pour le rôle: ${role.displayName}'); } /// Vide complètement le cache static Future clear() async { _cache.clear(); _cacheTimestamps.clear(); debugPrint('🧹 Cache dashboard complètement vidé'); } /// Obtient une valeur du cache static T? get(String key) { final timestamp = _cacheTimestamps[key]; if (timestamp == null) return null; // Vérifier l'expiration if (DateTime.now().difference(timestamp) > _cacheExpiry) { _cache.remove(key); _cacheTimestamps.remove(key); return null; } return _cache[key] as T?; } /// Met une valeur en cache static void set(String key, T value) { _cache[key] = value; _cacheTimestamps[key] = DateTime.now(); } /// Obtient les statistiques du cache static Map getStats() { final now = DateTime.now(); final validEntries = _cacheTimestamps.entries .where((entry) => now.difference(entry.value) <= _cacheExpiry) .length; return { 'totalEntries': _cache.length, 'validEntries': validEntries, 'expiredEntries': _cache.length - validEntries, 'cacheHitRate': '${(validEntries / _cache.length * 100).toStringAsFixed(1)}%', }; } }