From 8b6de12fd463ad441555ad388232c40b2633a203 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 10 Aug 2022 17:29:05 +0700 Subject: [PATCH] TF-611 Add domain layer for create a new filter email rule --- .../create_new_email_rule_filter_request.dart | 22 ++++++++++++++ .../repository/manage_account_repository.dart | 2 ++ .../state/create_new_rule_filter_state.dart | 22 ++++++++++++++ ...eate_new_email_rule_filter_interactor.dart | 29 +++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 lib/features/manage_account/domain/model/create_new_email_rule_filter_request.dart create mode 100644 lib/features/manage_account/domain/state/create_new_rule_filter_state.dart create mode 100644 lib/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart diff --git a/lib/features/manage_account/domain/model/create_new_email_rule_filter_request.dart b/lib/features/manage_account/domain/model/create_new_email_rule_filter_request.dart new file mode 100644 index 000000000..9618c53fb --- /dev/null +++ b/lib/features/manage_account/domain/model/create_new_email_rule_filter_request.dart @@ -0,0 +1,22 @@ + +import 'package:core/utils/app_logger.dart'; +import 'package:equatable/equatable.dart'; +import 'package:rule_filter/rule_filter/tmail_rule.dart'; + +class CreateNewEmailRuleFilterRequest with EquatableMixin { + + final List currentListTMailRules; + final TMailRule newTMailRule; + + CreateNewEmailRuleFilterRequest(this.currentListTMailRules, this.newTMailRule); + + List get newListTMailRules { + final newListRules = currentListTMailRules; + newListRules.insert(0, newTMailRule); + log('CreateNewEmailRuleFilterRequest::newListTMailRules(): $newListRules'); + return newListRules; + } + + @override + List get props => [currentListTMailRules, newTMailRule]; +} \ 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 5e93d120f..0ca6c63d1 100644 --- a/lib/features/manage_account/domain/repository/manage_account_repository.dart +++ b/lib/features/manage_account/domain/repository/manage_account_repository.dart @@ -6,6 +6,7 @@ import 'package:jmap_dart_client/jmap/identities/identity.dart'; 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_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; @@ -24,4 +25,5 @@ abstract class ManageAccountRepository { Future> deleteTMailRule(AccountId accountId, DeleteEmailRuleRequest deleteEmailRuleRequest); + Future> createNewEmailRuleFilter(AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest); } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/create_new_rule_filter_state.dart b/lib/features/manage_account/domain/state/create_new_rule_filter_state.dart new file mode 100644 index 000000000..7ea0758a5 --- /dev/null +++ b/lib/features/manage_account/domain/state/create_new_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 CreateNewRuleFilterSuccess extends UIState { + + final List newListRules; + + CreateNewRuleFilterSuccess(this.newListRules); + + @override + List get props => [newListRules]; +} + +class CreateNewRuleFilterFailure extends FeatureFailure { + final dynamic exception; + + CreateNewRuleFilterFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart b/lib/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart new file mode 100644 index 000000000..188c503cd --- /dev/null +++ b/lib/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart @@ -0,0 +1,29 @@ +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/create_new_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/create_new_rule_filter_state.dart'; + +class CreateNewEmailRuleFilterInteractor { + final ManageAccountRepository manageAccountRepository; + + CreateNewEmailRuleFilterInteractor(this.manageAccountRepository); + + Stream> execute( + AccountId accountId, + CreateNewEmailRuleFilterRequest ruleFilterRequest + ) async* { + try { + final newListRules = await manageAccountRepository.createNewEmailRuleFilter( + accountId, + ruleFilterRequest); + yield Right(CreateNewRuleFilterSuccess(newListRules)); + } catch (exception) { + yield Left(CreateNewRuleFilterFailure(exception)); + } + } +} \ No newline at end of file