From 2fcfc4ff0bc40e0b8fc0ad1204920d6932de9d9d Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 27 Jun 2023 21:50:44 +0700 Subject: [PATCH] TF-1933 Add GetStoredSendingEmail interactor (cherry picked from commit bcf27cbaa5fbc62767a82e658e543339c5197991) --- .../data/datasource/email_datasource.dart | 2 + .../email_datasource_impl.dart | 5 +++ .../email_hive_cache_datasource_impl.dart | 8 ++++ .../manager/sending_email_cache_manager.dart | 16 +++++--- .../sending_queue_repository_impl.dart | 5 +++ .../repository/sending_queue_repository.dart | 2 + .../state/get_stored_sending_email_state.dart | 40 +++++++++++++++++++ .../get_stored_sending_email_interactor.dart | 36 +++++++++++++++++ 8 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 lib/features/sending_queue/domain/state/get_stored_sending_email_state.dart create mode 100644 lib/features/sending_queue/domain/usecases/get_stored_sending_email_interactor.dart diff --git a/lib/features/email/data/datasource/email_datasource.dart b/lib/features/email/data/datasource/email_datasource.dart index bce5ec240..f6a86ca9c 100644 --- a/lib/features/email/data/datasource/email_datasource.dart +++ b/lib/features/email/data/datasource/email_datasource.dart @@ -102,4 +102,6 @@ abstract class EmailDataSource { Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds); Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails); + + Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId); } \ No newline at end of file diff --git a/lib/features/email/data/datasource_impl/email_datasource_impl.dart b/lib/features/email/data/datasource_impl/email_datasource_impl.dart index cc1d9379a..1490c7882 100644 --- a/lib/features/email/data/datasource_impl/email_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/email_datasource_impl.dart @@ -219,4 +219,9 @@ class EmailDataSourceImpl extends EmailDataSource { Future> deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds) { throw UnimplementedError(); } + + @override + Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId) { + throw UnimplementedError(); + } } \ No newline at end of file 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 7d883863e..a94d77929 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 @@ -279,4 +279,12 @@ class EmailHiveCacheDataSourceImpl extends EmailDataSource { return await _sendingEmailCacheManager.deleteMultipleSendingEmail(accountId, userName, sendingIds); }).catchError(_exceptionThrower.throwException); } + + @override + Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId) { + return Future.sync(() async { + final sendingEmailCache = await _sendingEmailCacheManager.getStoredSendingEmail(accountId, userName, sendingId); + return sendingEmailCache.toSendingEmail(); + }).catchError(_exceptionThrower.throwException); + } } \ 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 173e58016..34c6fecb5 100644 --- a/lib/features/offline_mode/manager/sending_email_cache_manager.dart +++ b/lib/features/offline_mode/manager/sending_email_cache_manager.dart @@ -1,5 +1,4 @@ -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'; @@ -24,7 +23,6 @@ class SendingEmailCacheManager { await _hiveCacheClient.insertItem(keyCache, sendingEmailHiveCache); final newSendingEmailHiveCache = await _hiveCacheClient.getItem(keyCache); if (newSendingEmailHiveCache != null) { - log('SendingEmailCacheManager::storeSendingEmail():sendingId: ${newSendingEmailHiveCache.sendingId} | sendingState: ${newSendingEmailHiveCache.sendingState}'); return newSendingEmailHiveCache; } else { throw NotFoundSendingEmailHiveObject(); @@ -42,7 +40,6 @@ class SendingEmailCacheManager { await _hiveCacheClient.deleteItem(keyCache); final storedSendingEmail = await _hiveCacheClient.getItem(keyCache); if (storedSendingEmail != null) { - log('SendingEmailCacheManager::deleteSendingEmail():sendingId: ${storedSendingEmail.sendingId}'); throw ExistSendingEmailHiveObject(); } } @@ -64,7 +61,6 @@ class SendingEmailCacheManager { await _hiveCacheClient.updateItem(keyCache, sendingEmailHiveCache); final newSendingEmailHiveCache = await _hiveCacheClient.getItem(keyCache); if (newSendingEmailHiveCache != null) { - log('SendingEmailCacheManager::updateSendingEmail():sendingId: ${newSendingEmailHiveCache.sendingId} | sendingState: ${newSendingEmailHiveCache.sendingState}'); return newSendingEmailHiveCache; } else { throw NotFoundSendingEmailHiveObject(); @@ -82,7 +78,6 @@ class SendingEmailCacheManager { }; await _hiveCacheClient.updateMultipleItem(mapSendingEmailCache); final newListSendingEmailCache = await _hiveCacheClient.getValuesByListKey(mapSendingEmailCache.keys.toList()); - log('SendingEmailCacheManager::updateMultipleSendingEmail():newListSendingEmailCache: ${newListSendingEmailCache.map((sendingEmail) => '${sendingEmail.sendingId} | ${sendingEmail.sendingState}').toList()}'); return newListSendingEmailCache; } @@ -90,11 +85,20 @@ class SendingEmailCacheManager { final listTupleKey = sendingIds.map((sendingId) => TupleKey(sendingId, accountId.asString, userName.value).encodeKey).toList(); await _hiveCacheClient.deleteMultipleItem(listTupleKey); final newListSendingEmailCache = await _hiveCacheClient.getValuesByListKey(listTupleKey); - log('SendingEmailCacheManager::deleteMultipleSendingEmail():newListSendingEmailCache: ${newListSendingEmailCache.map((sendingEmail) => '${sendingEmail.sendingId} | ${sendingEmail.sendingState}').toList()}'); if (newListSendingEmailCache.isNotEmpty) { throw ExistSendingEmailHiveObject(); } } + Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId) async { + final keyCache = TupleKey(sendingId, accountId.asString, userName.value).encodeKey; + final storedSendingEmail = await _hiveCacheClient.getItem(keyCache); + if (storedSendingEmail != null) { + return storedSendingEmail; + } else { + throw NotFoundSendingEmailHiveObject(); + } + } + Future closeSendingEmailHiveCacheBox() => _hiveCacheClient.closeBox(); } \ No newline at end of file diff --git a/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart b/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart index 6c21ac4d8..f2e757a42 100644 --- a/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart +++ b/lib/features/sending_queue/data/repository/sending_queue_repository_impl.dart @@ -39,4 +39,9 @@ class SendingQueueRepositoryImpl extends SendingQueueRepository { Future deleteMultipleSendingEmail(AccountId accountId, UserName userName, List sendingIds) { return _emailHiveCacheDataSourceImpl.deleteMultipleSendingEmail(accountId, userName, sendingIds); } + + @override + Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId) { + return _emailHiveCacheDataSourceImpl.getStoredSendingEmail(accountId, userName, sendingId); + } } \ No newline at end of file diff --git a/lib/features/sending_queue/domain/repository/sending_queue_repository.dart b/lib/features/sending_queue/domain/repository/sending_queue_repository.dart index 62fe689ba..bf85b72d8 100644 --- a/lib/features/sending_queue/domain/repository/sending_queue_repository.dart +++ b/lib/features/sending_queue/domain/repository/sending_queue_repository.dart @@ -15,4 +15,6 @@ abstract class SendingQueueRepository { Future updateSendingEmail(AccountId accountId, UserName userName, SendingEmail newSendingEmail); Future> updateMultipleSendingEmail(AccountId accountId, UserName userName, List newSendingEmails); + + Future getStoredSendingEmail(AccountId accountId, UserName userName, String sendingId); } \ No newline at end of file diff --git a/lib/features/sending_queue/domain/state/get_stored_sending_email_state.dart b/lib/features/sending_queue/domain/state/get_stored_sending_email_state.dart new file mode 100644 index 000000000..3e1eaacfc --- /dev/null +++ b/lib/features/sending_queue/domain/state/get_stored_sending_email_state.dart @@ -0,0 +1,40 @@ + +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; +import 'package:tmail_ui_user/features/offline_mode/model/sending_state.dart'; +import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart'; + +class GetStoredSendingEmailLoading extends UIState {} + +class GetStoredSendingEmailSuccess extends UIState { + + final SendingEmail sendingEmail; + final AccountId accountId; + final UserName userName; + final SendingState sendingState; + + GetStoredSendingEmailSuccess( + this.sendingEmail, + this.accountId, + this.userName, + this.sendingState + ); + + @override + List get props => [ + sendingEmail, + accountId, + userName, + sendingState + ]; +} + +class GetStoredSendingEmailFailure extends FeatureFailure { + + GetStoredSendingEmailFailure(dynamic exception) : super(exception: exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/sending_queue/domain/usecases/get_stored_sending_email_interactor.dart b/lib/features/sending_queue/domain/usecases/get_stored_sending_email_interactor.dart new file mode 100644 index 000000000..3ada1ca85 --- /dev/null +++ b/lib/features/sending_queue/domain/usecases/get_stored_sending_email_interactor.dart @@ -0,0 +1,36 @@ +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:tmail_ui_user/features/offline_mode/model/sending_state.dart'; +import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart'; +import 'package:tmail_ui_user/features/sending_queue/domain/state/get_stored_sending_email_state.dart'; + +class GetStoredSendingEmailInteractor { + final SendingQueueRepository _sendingQueueRepository; + + GetStoredSendingEmailInteractor(this._sendingQueueRepository); + + Stream> execute( + AccountId accountId, + UserName userName, + String sendingId, + SendingState sendingState + ) async* { + try { + yield Right(GetStoredSendingEmailLoading()); + final sendingEmail = await _sendingQueueRepository.getStoredSendingEmail(accountId, userName, sendingId); + yield Right( + GetStoredSendingEmailSuccess( + sendingEmail, + accountId, + userName, + sendingState + ) + ); + } catch (e) { + yield Left(GetStoredSendingEmailFailure(e)); + } + } +} \ No newline at end of file