TF-148 Add data layer for cleanup email cache

This commit is contained in:
dab246
2021-10-21 14:38:48 +07:00
committed by Dat H. Pham
parent 08a9a74de1
commit 00884989d8
9 changed files with 142 additions and 1 deletions
@@ -1,10 +1,12 @@
import 'package:core/core.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart';
import 'package:tmail_ui_user/features/thread/data/model/email_cache.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/email_address_hive_cache_extension.dart';
@@ -31,4 +33,15 @@ extension EmailCacheExtension on EmailCache {
: null,
);
}
bool expireTimeCaching(CleanupRule cleanupRule) {
final currentTime = DateTime.now();
if (receivedAt != null) {
final countDay = currentTime.daysBetween(receivedAt!.toLocal());
if (countDay >= cleanupRule.cachingEmailPeriod.countDay) {
return true;
}
}
return false;
}
}
@@ -3,6 +3,7 @@ import 'package:model/model.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:tmail_ui_user/features/caching/email_cache_client.dart';
import 'package:tmail_ui_user/features/cleanup/domain/model/cleanup_rule.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/email_cache_extension.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/email_extension.dart';
import 'package:tmail_ui_user/features/thread/data/extensions/list_email_cache_extension.dart';
@@ -49,5 +50,17 @@ class EmailCacheManager {
}
}
Future<bool> clean(CleanupRule cleanupRule) async {
final emailCacheExist = await _emailCacheClient.isExistTable();
if (emailCacheExist) {
final listEmailCache = await _emailCacheClient.getAll();
final listEmailIdCacheExpire = listEmailCache
.where((emailCache) => emailCache.expireTimeCaching(cleanupRule))
.map((emailCache) => emailCache.id)
.toList();
await _emailCacheClient.deleteMultipleItem(listEmailIdCacheExpire);
return true;
}
return false;
}
}