63 lines
1.7 KiB
Dart
63 lines
1.7 KiB
Dart
import '../models/activity.dart';
|
|
|
|
class ActivityCacheService {
|
|
static final ActivityCacheService _instance = ActivityCacheService._internal();
|
|
|
|
factory ActivityCacheService() {
|
|
return _instance;
|
|
}
|
|
|
|
ActivityCacheService._internal();
|
|
|
|
// Cache : tripId -> liste d'activités
|
|
final Map<String, List<Activity>> _cache = {};
|
|
|
|
// Timestamps pour invalider le cache après 30 minutes
|
|
final Map<String, DateTime> _cacheTimestamps = {};
|
|
|
|
static const Duration _cacheValidityDuration = Duration(minutes: 30);
|
|
|
|
/// Stocker les activités Google pour un voyage
|
|
void setCachedActivities(String tripId, List<Activity> activities) {
|
|
_cache[tripId] = activities;
|
|
_cacheTimestamps[tripId] = DateTime.now();
|
|
}
|
|
|
|
/// Récupérer les activités en cache si elles sont toujours valides
|
|
List<Activity>? getCachedActivities(String tripId) {
|
|
if (!_cache.containsKey(tripId)) {
|
|
return null;
|
|
}
|
|
|
|
final timestamp = _cacheTimestamps[tripId];
|
|
if (timestamp != null) {
|
|
final age = DateTime.now().difference(timestamp);
|
|
if (age > _cacheValidityDuration) {
|
|
// Cache expiré, nettoyer
|
|
_cache.remove(tripId);
|
|
_cacheTimestamps.remove(tripId);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return _cache[tripId];
|
|
}
|
|
|
|
/// Vérifier si des activités sont en cache pour ce voyage
|
|
bool hasCachedActivities(String tripId) {
|
|
return getCachedActivities(tripId) != null;
|
|
}
|
|
|
|
/// Nettoyer le cache pour un voyage spécifique
|
|
void clearCache(String tripId) {
|
|
_cache.remove(tripId);
|
|
_cacheTimestamps.remove(tripId);
|
|
}
|
|
|
|
/// Nettoyer tout le cache
|
|
void clearAllCache() {
|
|
_cache.clear();
|
|
_cacheTimestamps.clear();
|
|
}
|
|
}
|