diff --git a/lib/features/email/data/repository/email_repository_impl.dart b/lib/features/email/data/repository/email_repository_impl.dart index 432bf3c91..49989e611 100644 --- a/lib/features/email/data/repository/email_repository_impl.dart +++ b/lib/features/email/data/repository/email_repository_impl.dart @@ -203,4 +203,9 @@ class EmailRepositoryImpl extends EmailRepository { Future storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail) { return emailDataSource[DataSourceType.hiveCache]!.storeOpenedEmail(session, accountId, detailedEmail); } + + @override + Future getOpenedEmail(Session session, AccountId accountId) { + 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 f32ac77bd..b72cacbed 100644 --- a/lib/features/email/domain/repository/email_repository.dart +++ b/lib/features/email/domain/repository/email_repository.dart @@ -95,4 +95,6 @@ abstract class EmailRepository { Future storeEmailToCache(Session session, AccountId accountId, Email email); Future storeOpenedEmail(Session session, AccountId accountId, DetailedEmail detailedEmail); + + Future getOpenedEmail(Session session, AccountId accountId); } \ No newline at end of file diff --git a/lib/features/email/domain/state/get_opened_email_from_cache_state.dart b/lib/features/email/domain/state/get_opened_email_from_cache_state.dart new file mode 100644 index 000000000..1cf21af58 --- /dev/null +++ b/lib/features/email/domain/state/get_opened_email_from_cache_state.dart @@ -0,0 +1,22 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart'; + +class GetOpenedEmailLoading extends UIState {} + +class GetOpenedEmailSuccess extends UIState { + final DetailedEmail detailedEmail; + + GetOpenedEmailSuccess(this.detailedEmail); + + @override + List get props => [detailedEmail]; +} + +class GetOpenedEmailFailure extends FeatureFailure { + + GetOpenedEmailFailure(dynamic exception) : super(exception: exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/get_opened_email_from_cache_interactor.dart b/lib/features/email/domain/usecases/get_opened_email_from_cache_interactor.dart new file mode 100644 index 000000000..6f1b92419 --- /dev/null +++ b/lib/features/email/domain/usecases/get_opened_email_from_cache_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/session/session.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_opened_email_from_cache_state.dart'; + +class GetOpenedEmailFromCacheInteractor { + final EmailRepository _emailRepository; + + GetOpenedEmailFromCacheInteractor(this._emailRepository); + + Stream> execute(Session session, AccountId accountId) async* { + try { + yield Right(GetOpenedEmailLoading()); + final detailedEmail = await _emailRepository.getOpenedEmail(session, accountId); + yield Right(GetOpenedEmailSuccess(detailedEmail)); + } catch (e) { + yield Left(GetOpenedEmailFailure(e)); + } + } +} \ No newline at end of file