From 22bba8c459fb6fb9e97e8fe7d8c8f3abefbdaab0 Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Wed, 31 May 2023 00:57:45 +0700 Subject: [PATCH] TF-1842: Create `deleteSendingEmail` in domain layer (cherry picked from commit b66931aa1b6cabb7ac32d9457d6d4ed69d3ea42d) --- .../email_hive_cache_datasource_impl.dart | 8 +++++++ .../domain/repository/email_repository.dart | 2 ++ .../state/delete_sending_email_state.dart | 17 +++++++++++++ .../delete_sending_email_interactor.dart | 24 +++++++++++++++++++ .../manager/sending_email_cache_manager.dart | 10 ++++++++ 5 files changed, 61 insertions(+) create mode 100644 lib/features/email/domain/state/delete_sending_email_state.dart create mode 100644 lib/features/email/domain/usecases/delete_sending_email_interactor.dart diff --git a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart index 9b47db2e5..2b55a783b 100644 --- a/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart @@ -260,4 +260,12 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { return sendingEmailsCache.toSendingEmails(); }).catchError(_exceptionThrower.throwException); } + + + @override + Future deleteSendingEmail(AccountId accountId, UserName userName, EmailId emailId) { + return Future.sync(() async { + return await _sendingEmailCacheManager.deleteSendingEmail(accountId, userName, emailId.id.value); + }).catchError(_exceptionThrower.throwException); + } } \ No newline at end of file diff --git a/lib/features/email/domain/repository/email_repository.dart b/lib/features/email/domain/repository/email_repository.dart index 48bc1ce32..64789f2b9 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -103,4 +103,6 @@ abstract class EmailRepository { Future getOpenedEmail(Session session, AccountId accountId, EmailId emailId); Future storeSendingEmail(AccountId accountId, UserName userName, SendingEmail sendingEmail); + + Future deleteSendingEmail(AccountId accountId, UserName userName, EmailId emailId); } \ No newline at end of file diff --git a/lib/features/email/domain/state/delete_sending_email_state.dart b/lib/features/email/domain/state/delete_sending_email_state.dart new file mode 100644 index 000000000..4d9d5c6b1 --- /dev/null +++ b/lib/features/email/domain/state/delete_sending_email_state.dart @@ -0,0 +1,17 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class DeleteSendingEmailLoading extends UIState {} + +class DeleteSendingEmailSuccess extends UIState { + + @override + List get props => []; +} + +class DeleteSendingEmailFailure extends FeatureFailure { + DeleteSendingEmailFailure(dynamic exception) : super(exception: exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/delete_sending_email_interactor.dart b/lib/features/email/domain/usecases/delete_sending_email_interactor.dart new file mode 100644 index 000000000..21b758d04 --- /dev/null +++ b/lib/features/email/domain/usecases/delete_sending_email_interactor.dart @@ -0,0 +1,24 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; +import 'package:jmap_dart_client/jmap/mail/email/email.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_state.dart'; + +class DeleteSendingEmailInteractor { + final EmailRepository _emailRepository; + + DeleteSendingEmailInteractor(this._emailRepository); + + Stream> execute(AccountId accountId, UserName userName, EmailId emailId) async* { + try { + yield Right(DeleteSendingEmailLoading()); + await _emailRepository.deleteSendingEmail(accountId, userName, emailId); + yield Right(DeleteSendingEmailSuccess()); + } catch (e) { + yield Left(DeleteSendingEmailFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/offline_mode/manager/sending_email_cache_manager.dart b/lib/features/offline_mode/manager/sending_email_cache_manager.dart index f2874ef87..e593d0916 100644 --- a/lib/features/offline_mode/manager/sending_email_cache_manager.dart +++ b/lib/features/offline_mode/manager/sending_email_cache_manager.dart @@ -30,4 +30,14 @@ class SendingEmailCacheManager { sendingEmailsCache.sortByLatestTime(); return sendingEmailsCache; } + + Future deleteSendingEmail( + AccountId accountId, + UserName userName, + String sendingEmailId + ) { + final keyCache = TupleKey(sendingEmailId, accountId.asString, userName.value).encodeKey; + log('SendingEmailCacheManager::deleteSendingEmail():keyCache: $keyCache'); + return _hiveCacheClient.deleteItem(keyCache); + } } \ No newline at end of file