TF-2102 Add restore_deleted_message interactors

(cherry picked from commit ba81255c213c49ecce7afdeca25a5cd7657c3816)
This commit is contained in:
hieubt
2023-12-20 11:26:55 +07:00
committed by Dat H. Pham
parent 01f6ee1612
commit 1e1022377b
5 changed files with 102 additions and 14 deletions
+14 -14
View File
@@ -718,28 +718,28 @@ class EmailAPI with HandleSetErrorMixin {
return emailRecoveryActionSetResponse!.created![restoredDeletedMessageRequest.createRequestId]!;
}
Future<EmailRecoveryAction> getRestoredDeletedMessage(EmailRecoveryActionId emailRecoveryActionId) {
Future<EmailRecoveryAction> 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<GetEmailRecoveryActionResponse>(
getEmailRecoveryActionInvocation.methodCallId,
GetEmailRecoveryActionResponse.deserialize
);
.execute();
final getEmailRecoveryActionResponse = response.parse<GetEmailRecoveryActionResponse>(
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();
}
}
}
@@ -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<Object> get props => [emailRecoveryAction];
}
class GetRestoredDeletedMessageFailure extends FeatureFailure {
GetRestoredDeletedMessageFailure(dynamic exception) : super(exception: exception);
}
@@ -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<Object> get props => [emailRecoveryAction];
}
class RestoreDeletedMessageFailure extends FeatureFailure {
RestoreDeletedMessageFailure(dynamic exception) : super(exception: exception);
}
@@ -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<Either<Failure, Success>> execute(
EmailRecoveryActionId emailRecoveryActionId,
) async* {
try {
yield Right<Failure, Success>(GetRestoredDeletedMessageLoading());
final emailRecovery = await _emailRepository.getRestoredDeletedMessage(emailRecoveryActionId);
yield Right<Failure, Success>(GetRestoredDeletedMessageSuccess(emailRecovery));
} catch (e) {
yield Left<Failure, Success>(GetRestoredDeletedMessageFailure(e));
}
}
}
@@ -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<Either<Failure, Success>> execute(
RestoredDeletedMessageRequest newRecoveryRequest,
) async* {
try {
yield Right<Failure, Success>(RestoreDeletedMessageLoading());
final emailRecovery = await _emailRepository.restoreDeletedMessage(newRecoveryRequest);
yield Right<Failure, Success>(RestoreDeletedMessageSuccess(emailRecovery));
} catch (e) {
yield Left<Failure, Success>(RestoreDeletedMessageFailure(e));
}
}
}