diff --git a/lib/features/manage_account/domain/model/edit_email_rule_filter_request.dart b/lib/features/manage_account/domain/model/edit_email_rule_filter_request.dart new file mode 100644 index 000000000..00625e76f --- /dev/null +++ b/lib/features/manage_account/domain/model/edit_email_rule_filter_request.dart @@ -0,0 +1,30 @@ + +import 'package:core/utils/app_logger.dart'; +import 'package:equatable/equatable.dart'; +import 'package:rule_filter/rule_filter/tmail_rule.dart'; + +class EditEmailRuleFilterRequest with EquatableMixin { + + final List currentListTMailRules; + final TMailRule tMailRuleChanged; + + EditEmailRuleFilterRequest(this.currentListTMailRules, this.tMailRuleChanged); + + List get listTMailRulesUpdated { + final listRulesUpdated = currentListTMailRules + .map((rule) { + if (rule.id == tMailRuleChanged.id) { + return tMailRuleChanged; + } else { + return rule; + } + }) + .toList(); + + log('EditEmailRuleFilterRequest::listTMailRulesUpdated(): $listRulesUpdated'); + return listRulesUpdated; + } + + @override + List get props => [currentListTMailRules, tMailRuleChanged]; +} \ 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 0ca6c63d1..26ca1db98 100644 --- a/lib/features/manage_account/domain/repository/manage_account_repository.dart +++ b/lib/features/manage_account/domain/repository/manage_account_repository.dart @@ -7,6 +7,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/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'; @@ -26,4 +27,6 @@ abstract class ManageAccountRepository { Future> deleteTMailRule(AccountId accountId, DeleteEmailRuleRequest deleteEmailRuleRequest); Future> createNewEmailRuleFilter(AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest); + + Future> editEmailRuleFilter(AccountId accountId, EditEmailRuleFilterRequest ruleFilterRequest); } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/edit_email_rule_filter_state.dart b/lib/features/manage_account/domain/state/edit_email_rule_filter_state.dart new file mode 100644 index 000000000..ce4a8095d --- /dev/null +++ b/lib/features/manage_account/domain/state/edit_email_rule_filter_state.dart @@ -0,0 +1,22 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:rule_filter/rule_filter/tmail_rule.dart'; + +class EditEmailRuleFilterSuccess extends UIState { + + final List listRulesUpdated; + + EditEmailRuleFilterSuccess(this.listRulesUpdated); + + @override + List get props => [listRulesUpdated]; +} + +class EditEmailRuleFilterFailure extends FeatureFailure { + final dynamic exception; + + EditEmailRuleFilterFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/edit_email_rule_filter_interactor.dart b/lib/features/manage_account/domain/usecases/edit_email_rule_filter_interactor.dart new file mode 100644 index 000000000..3ed63f365 --- /dev/null +++ b/lib/features/manage_account/domain/usecases/edit_email_rule_filter_interactor.dart @@ -0,0 +1,28 @@ +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/edit_email_rule_filter_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/edit_email_rule_filter_state.dart'; + +class EditEmailRuleFilterInteractor { + final ManageAccountRepository manageAccountRepository; + + EditEmailRuleFilterInteractor(this.manageAccountRepository); + + Stream> execute( + AccountId accountId, + EditEmailRuleFilterRequest ruleFilterRequest + ) async* { + try { + final newListRules = await manageAccountRepository + .editEmailRuleFilter(accountId, ruleFilterRequest); + yield Right(EditEmailRuleFilterSuccess(newListRules)); + } catch (exception) { + yield Left(EditEmailRuleFilterFailure(exception)); + } + } +} \ No newline at end of file