From 1e1022377b244c6ada5abf042a174b31e2be7d70 Mon Sep 17 00:00:00 2001 From: hieubt Date: Wed, 20 Dec 2023 11:26:55 +0700 Subject: [PATCH] TF-2102 Add `restore_deleted_message` interactors (cherry picked from commit ba81255c213c49ecce7afdeca25a5cd7657c3816) --- .../email/data/network/email_api.dart | 28 +++++++++---------- .../get_restored_deleted_message_state.dart | 18 ++++++++++++ .../state/restore_deleted_message_state.dart | 18 ++++++++++++ ...t_restored_deleted_message_interactor.dart | 26 +++++++++++++++++ ...store_deleted_message_interactor.dart.dart | 26 +++++++++++++++++ 5 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 lib/features/email/domain/state/get_restored_deleted_message_state.dart create mode 100644 lib/features/email/domain/state/restore_deleted_message_state.dart create mode 100644 lib/features/email/domain/usecases/get_restored_deleted_message_interactor.dart create mode 100644 lib/features/email/domain/usecases/restore_deleted_message_interactor.dart.dart diff --git a/lib/features/email/data/network/email_api.dart b/lib/features/email/data/network/email_api.dart index afb72ee68..24fae84b4 100644 --- a/lib/features/email/data/network/email_api.dart +++ b/lib/features/email/data/network/email_api.dart @@ -718,28 +718,28 @@ class EmailAPI with HandleSetErrorMixin { return emailRecoveryActionSetResponse!.created![restoredDeletedMessageRequest.createRequestId]!; } - Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) { + Future getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) async { final processingInvocation = ProcessingInvocation(); final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation); final getEmailRecoveryActionMethod = GetEmailRecoveryActionMethod() ..addIds({emailRecoveryActionId.id}); final getEmailRecoveryActionInvocation = requestBuilder.invocation(getEmailRecoveryActionMethod); - return (requestBuilder + + final response = await (requestBuilder ..usings(getEmailRecoveryActionMethod.requiredCapabilities)) .build() - .execute() - .then((response) { - final resultList = response.parse( - getEmailRecoveryActionInvocation.methodCallId, - GetEmailRecoveryActionResponse.deserialize - ); + .execute(); + + final getEmailRecoveryActionResponse = response.parse( + getEmailRecoveryActionInvocation.methodCallId, + GetEmailRecoveryActionResponse.deserialize + ); - if (resultList?.list.isNotEmpty == true) { - return resultList!.list.firstWhere((element) => element.id == emailRecoveryActionId); - } else { - throw NotFoundEmailRecoveryActionException(); - } - }); + if (getEmailRecoveryActionResponse?.list.isNotEmpty == true) { + return getEmailRecoveryActionResponse!.list.firstWhere((element) => element.id == emailRecoveryActionId); + } else { + throw NotFoundEmailRecoveryActionException(); + } } } \ No newline at end of file diff --git a/lib/features/email/domain/state/get_restored_deleted_message_state.dart b/lib/features/email/domain/state/get_restored_deleted_message_state.dart new file mode 100644 index 000000000..e1c52d1e7 --- /dev/null +++ b/lib/features/email/domain/state/get_restored_deleted_message_state.dart @@ -0,0 +1,18 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; + +class GetRestoredDeletedMessageLoading extends LoadingState {} + +class GetRestoredDeletedMessageSuccess extends UIState { + final EmailRecoveryAction emailRecoveryAction; + + GetRestoredDeletedMessageSuccess(this.emailRecoveryAction); + + @override + List get props => [emailRecoveryAction]; +} + +class GetRestoredDeletedMessageFailure extends FeatureFailure { + GetRestoredDeletedMessageFailure(dynamic exception) : super(exception: exception); +} \ No newline at end of file diff --git a/lib/features/email/domain/state/restore_deleted_message_state.dart b/lib/features/email/domain/state/restore_deleted_message_state.dart new file mode 100644 index 000000000..ef3a5be91 --- /dev/null +++ b/lib/features/email/domain/state/restore_deleted_message_state.dart @@ -0,0 +1,18 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action.dart'; + +class RestoreDeletedMessageLoading extends LoadingState {} + +class RestoreDeletedMessageSuccess extends UIState { + final EmailRecoveryAction emailRecoveryAction; + + RestoreDeletedMessageSuccess(this.emailRecoveryAction); + + @override + List get props => [emailRecoveryAction]; +} + +class RestoreDeletedMessageFailure extends FeatureFailure { + RestoreDeletedMessageFailure(dynamic exception) : super(exception: exception); +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/get_restored_deleted_message_interactor.dart b/lib/features/email/domain/usecases/get_restored_deleted_message_interactor.dart new file mode 100644 index 000000000..6c16c6690 --- /dev/null +++ b/lib/features/email/domain/usecases/get_restored_deleted_message_interactor.dart @@ -0,0 +1,26 @@ +import 'dart:async'; + +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:email_recovery/email_recovery/email_recovery_action_id.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/get_restored_deleted_message_state.dart'; + +class GetRestoredDeletedMessageInterator { + final EmailRepository _emailRepository; + + GetRestoredDeletedMessageInterator(this._emailRepository); + + Stream> execute( + EmailRecoveryActionId emailRecoveryActionId, + ) async* { + try { + yield Right(GetRestoredDeletedMessageLoading()); + final emailRecovery = await _emailRepository.getRestoredDeletedMessage(emailRecoveryActionId); + yield Right(GetRestoredDeletedMessageSuccess(emailRecovery)); + } catch (e) { + yield Left(GetRestoredDeletedMessageFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/email/domain/usecases/restore_deleted_message_interactor.dart.dart b/lib/features/email/domain/usecases/restore_deleted_message_interactor.dart.dart new file mode 100644 index 000000000..9e243f1f2 --- /dev/null +++ b/lib/features/email/domain/usecases/restore_deleted_message_interactor.dart.dart @@ -0,0 +1,26 @@ +import 'dart:async'; + +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart'; +import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; +import 'package:tmail_ui_user/features/email/domain/state/restore_deleted_message_state.dart'; + +class RestoredDeletedMessageInteractor { + final EmailRepository _emailRepository; + + RestoredDeletedMessageInteractor(this._emailRepository); + + Stream> execute( + RestoredDeletedMessageRequest newRecoveryRequest, + ) async* { + try { + yield Right(RestoreDeletedMessageLoading()); + final emailRecovery = await _emailRepository.restoreDeletedMessage(newRecoveryRequest); + yield Right(RestoreDeletedMessageSuccess(emailRecovery)); + } catch (e) { + yield Left(RestoreDeletedMessageFailure(e)); + } + } +} \ No newline at end of file