TF-1810 Create DetailedEmailCacheManager to manage store/get/delete cache

(cherry picked from commit b2678ba89f5f2842726464f475343b279db4251f)
This commit is contained in:
dab246
2023-05-10 10:28:19 +07:00
committed by Dat Vu
parent 006326fe05
commit d6a5c88281
4 changed files with 76 additions and 12 deletions
@@ -0,0 +1,60 @@
import 'package:core/utils/app_logger.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/extensions/account_id_extensions.dart';
import 'package:tmail_ui_user/features/caching/clients/detailed_email_hive_cache_client.dart';
import 'package:tmail_ui_user/features/caching/utils/cache_utils.dart';
import 'package:tmail_ui_user/features/caching/utils/caching_constants.dart';
import 'package:tmail_ui_user/features/offline_mode/extensions/list_detailed_email_hive_cache_extension.dart';
import 'package:tmail_ui_user/features/offline_mode/model/detailed_email_hive_cache.dart';
class DetailedEmailCacheManager {
final DetailedEmailHiveCacheClient _cacheClient;
DetailedEmailCacheManager(this._cacheClient);
Future<void> handleStoreDetailedEmailToCache(
AccountId accountId,
UserName userName,
DetailedEmailHiveCache detailedEmailCache
) async {
final listDetailedEmails = await getAllDetailedEmails(accountId, userName);
if (listDetailedEmails.length >= CachingConstants.maxNumberRecentEmails) {
final latestEmail = listDetailedEmails.last;
log('DetailedEmailCacheManager::handleStoreDetailedEmailToCache():latestEmail: $latestEmail');
await removeDetailedEmail(accountId, userName, latestEmail.emailId);
}
return insertDetailedEmail(accountId, userName, detailedEmailCache);
}
Future<void> insertDetailedEmail(
AccountId accountId,
UserName userName,
DetailedEmailHiveCache detailedEmailCache
) {
final keyCache = TupleKey(detailedEmailCache.emailId, accountId.asString, userName.value).encodeKey;
log('DetailedEmailCacheManager::storeDetailedEmail(): $keyCache');
return _cacheClient.insertItem(keyCache, detailedEmailCache);
}
Future<void> removeDetailedEmail(
AccountId accountId,
UserName userName,
String emailId
) {
final keyCache = TupleKey(emailId, accountId.asString, userName.value).encodeKey;
log('DetailedEmailCacheManager::removeDetailedEmail(): $keyCache');
return _cacheClient.deleteItem(keyCache);
}
Future<List<DetailedEmailHiveCache>> getAllDetailedEmails(AccountId accountId, UserName userName) async {
final detailedEmailCacheList = await _cacheClient.getListByTupleKey(accountId.asString, userName.value);
detailedEmailCacheList.sortByLatestTime();
log('DetailedEmailCacheManager::getAllDetailedEmails():SIZE: ${detailedEmailCacheList.length}');
return detailedEmailCacheList;
}
}