diff --git a/lib/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart b/lib/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart new file mode 100644 index 000000000..b6ed193a5 --- /dev/null +++ b/lib/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart @@ -0,0 +1,23 @@ +import 'package:equatable/equatable.dart'; +import 'package:forward/forward/tmail_forward.dart'; + +class DeleteRecipientInForwardingRequest with EquatableMixin { + final TMailForward currentForward; + final Set listRecipientDeleted; + + DeleteRecipientInForwardingRequest({ + required this.currentForward, + required this.listRecipientDeleted, + }); + + TMailForward get newTMailForward { + final newListRecipients = currentForward.forwards + .where((recipient) => !listRecipientDeleted.contains(recipient)) + .toSet(); + + return currentForward.copyWith(forwards: newListRecipients); + } + + @override + List get props => [currentForward, listRecipientDeleted]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/repository/manage_account_repository.dart b/lib/features/manage_account/domain/repository/manage_account_repository.dart index 26cdf0e43..e058eca74 100644 --- a/lib/features/manage_account/domain/repository/manage_account_repository.dart +++ b/lib/features/manage_account/domain/repository/manage_account_repository.dart @@ -9,6 +9,7 @@ import 'package:rule_filter/rule_filter/tmail_rule.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/delete_email_rule_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/edit_email_rule_filter_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; @@ -37,4 +38,6 @@ abstract class ManageAccountRepository { Future> getAllVacationResponse(AccountId accountId); Future> updateVacation(AccountId accountId, VacationResponse vacationResponse); + + Future deleteRecipientInForwarding(AccountId accountId, DeleteRecipientInForwardingRequest deleteRequest); } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart b/lib/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart new file mode 100644 index 000000000..5040b89a4 --- /dev/null +++ b/lib/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart @@ -0,0 +1,29 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:forward/forward/tmail_forward.dart'; + +class StartDeleteRecipientInForwarding extends UIState { + + StartDeleteRecipientInForwarding(); + + @override + List get props => []; +} + +class DeleteRecipientInForwardingSuccess extends UIState { + final TMailForward forward; + + DeleteRecipientInForwardingSuccess(this.forward); + + @override + List get props => [forward]; +} + +class DeleteRecipientInForwardingFailure extends FeatureFailure { + final dynamic exception; + + DeleteRecipientInForwardingFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart b/lib/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart new file mode 100644 index 000000000..40b52956b --- /dev/null +++ b/lib/features/manage_account/domain/usecases/delete_recipient_in_forwarding_interactor.dart @@ -0,0 +1,30 @@ +import 'dart:core'; + +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:tmail_ui_user/features/manage_account/domain/model/delete_recipient_in_forwarding_request.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/delete_recipient_in_forwarding_state.dart'; + +class DeleteRecipientInForwardingInteractor { + final ManageAccountRepository manageAccountRepository; + + DeleteRecipientInForwardingInteractor(this.manageAccountRepository); + + Stream> execute( + AccountId accountId, + DeleteRecipientInForwardingRequest deleteRequest + ) async* { + try { + yield Right(StartDeleteRecipientInForwarding()); + final result = await manageAccountRepository.deleteRecipientInForwarding( + accountId, + deleteRequest); + yield Right(DeleteRecipientInForwardingSuccess(result)); + } catch (exception) { + yield Left(DeleteRecipientInForwardingFailure(exception)); + } + } +} \ No newline at end of file