From a5dbcb13572cce1cbf0bf1131188b0074514358a Mon Sep 17 00:00:00 2001 From: HuyNguyen Date: Thu, 11 May 2023 14:06:42 +0700 Subject: [PATCH] TF-1808: Add StoreOpenedEmailToCacheInteractor to store email when opened (cherry picked from commit 45a59e33358caba1d5e191f8c4f9b2a0ecee9342) --- .../repository/email_repository_impl.dart | 5 ++++ .../domain/repository/email_repository.dart | 2 ++ .../store_opened_email_to_cache_state.dart | 13 +++++++++ ...tore_opened_email_to_cache_interactor.dart | 28 +++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 lib/features/email/domain/state/store_opened_email_to_cache_state.dart create mode 100644 lib/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart index 1217701ce..efe85c026 100644 --- a/lib/features/email/data/repository/email_repository_impl.dart +++ b/lib/features/email/data/repository/email_repository_impl.dart @@ -198,4 +198,9 @@ class EmailRepositoryImpl extends EmailRepository { Future storeEmailToCache(Session session, AccountId accountId, Email email) { return emailDataSource[DataSourceType.hiveCache]!.storeEmail(session, accountId, email); } + + @override + Future storeOpenedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail) { + throw UnimplementedError(); + } } \ 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 b6f4ae20b..48711459b 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -93,4 +93,6 @@ abstract class EmailRepository { Future getDetailedEmailById(Session session, AccountId accountId, EmailId emailId); Future storeEmailToCache(Session session, AccountId accountId, Email email); + + Future storeOpenedEmailToCache(Session session, AccountId accountId, DetailedEmail detailedEmail); } \ No newline at end of file diff --git a/lib/features/email/domain/state/store_opened_email_to_cache_state.dart b/lib/features/email/domain/state/store_opened_email_to_cache_state.dart new file mode 100644 index 000000000..fd611352e --- /dev/null +++ b/lib/features/email/domain/state/store_opened_email_to_cache_state.dart @@ -0,0 +1,13 @@ +import 'package:core/core.dart'; + +class StoreOpenedEmailToCacheLoading extends UIState {} + +class StoreOpenedEmailToCacheSuccess extends UIState {} + +class StoreOpenedEmailToCacheFailure extends FeatureFailure { + + StoreOpenedEmailToCacheFailure(dynamic exception) : super(exception: exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart b/lib/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart new file mode 100644 index 000000000..070129202 --- /dev/null +++ b/lib/features/email/domain/usecases/store_opened_email_to_cache_interactor.dart @@ -0,0 +1,28 @@ +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/session/session.dart'; +import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/store_opened_email_to_cache_state.dart'; + +class StoreOpenedEmailToCacheInteractor { + final EmailRepository _emailRepository; + + StoreOpenedEmailToCacheInteractor(this._emailRepository); + + Stream> execute( + Session session, + AccountId accountId, + DetailedEmail detailedEmail + ) async* { + try { + yield Right(StoreOpenedEmailToCacheLoading()); + await _emailRepository.storeOpenedEmailToCache(session, accountId, detailedEmail); + yield Right(StoreOpenedEmailToCacheSuccess()); + } catch (e) { + yield Left(StoreOpenedEmailToCacheFailure(e)); + } + } +} \ No newline at end of file