From c6ec5baf9b5b70944c2e727263d0e3cd9d33438a Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 10 Aug 2022 17:30:42 +0700 Subject: [PATCH] TF-611 Add data layer for create a new filter email rule --- .../datasource/manage_account_datasource.dart | 2 ++ .../manage_account_datasource_impl.dart | 28 +++++++++++-------- .../list_tmail_rule_extensions.dart | 16 +++++++++++ .../data/network/manage_account_api.dart | 10 ++----- .../manage_account_repository_impl.dart | 6 ++++ 5 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 lib/features/manage_account/data/extensions/list_tmail_rule_extensions.dart diff --git a/lib/features/manage_account/data/datasource/manage_account_datasource.dart b/lib/features/manage_account/data/datasource/manage_account_datasource.dart index c06c58801..79021fb8f 100644 --- a/lib/features/manage_account/data/datasource/manage_account_datasource.dart +++ b/lib/features/manage_account/data/datasource/manage_account_datasource.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 ManageAccountDataSource { 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/data/datasource_impl/manage_account_datasource_impl.dart b/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart index 39f654562..2e6c08e43 100644 --- a/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart +++ b/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart @@ -9,10 +9,12 @@ import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_ import 'package:tmail_ui_user/features/manage_account/data/network/manage_account_api.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'; class ManageAccountDataSourceImpl extends ManageAccountDataSource { + final ManageAccountAPI manageAccountAPI; final LanguageCacheManager _languageCacheManager; @@ -23,19 +25,16 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { Future getAllIdentities(AccountId accountId, {Properties? properties}) { return Future.sync(() async { - return await manageAccountAPI.getAllIdentities(accountId, - properties: properties); + return await manageAccountAPI.getAllIdentities(accountId, properties: properties); }).catchError((error) { throw error; }); } @override - Future createNewIdentity( - AccountId accountId, CreateNewIdentityRequest identityRequest) { + Future createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest) { return Future.sync(() async { - return await manageAccountAPI.createNewIdentity( - accountId, identityRequest); + return await manageAccountAPI.createNewIdentity(accountId, identityRequest); }).catchError((error) { throw error; }); @@ -51,11 +50,9 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { } @override - Future editIdentity( - AccountId accountId, EditIdentityRequest editIdentityRequest) { + Future editIdentity(AccountId accountId, EditIdentityRequest editIdentityRequest) { return Future.sync(() async { - return await manageAccountAPI.editIdentity( - accountId, editIdentityRequest); + return await manageAccountAPI.editIdentity(accountId, editIdentityRequest); }).catchError((error) { throw error; }); @@ -90,4 +87,13 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { throw error; }); } -} + + @override + Future> createNewEmailRuleFilter(AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest) { + return Future.sync(() async { + return await manageAccountAPI.updateListTMailRule(accountId, ruleFilterRequest.newListTMailRules); + }).catchError((error) { + throw error; + }); + } +} \ No newline at end of file diff --git a/lib/features/manage_account/data/extensions/list_tmail_rule_extensions.dart b/lib/features/manage_account/data/extensions/list_tmail_rule_extensions.dart new file mode 100644 index 000000000..b0559eb53 --- /dev/null +++ b/lib/features/manage_account/data/extensions/list_tmail_rule_extensions.dart @@ -0,0 +1,16 @@ + +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:rule_filter/rule_filter/rule_id.dart'; +import 'package:rule_filter/rule_filter/tmail_rule.dart'; + +extension ListTMailRuleExtensions on List { + + List get withIds { + return asMap() + .map((key, rule) => MapEntry( + key, + rule.copyWith(id: RuleId(id: Id(key.toString()))))) + .values + .toList(); + } +} \ No newline at end of file diff --git a/lib/features/manage_account/data/network/manage_account_api.dart b/lib/features/manage_account/data/network/manage_account_api.dart index 8787e540c..db695aa46 100644 --- a/lib/features/manage_account/data/network/manage_account_api.dart +++ b/lib/features/manage_account/data/network/manage_account_api.dart @@ -14,9 +14,9 @@ import 'package:jmap_dart_client/jmap/jmap_request.dart'; import 'package:rule_filter/rule_filter/get/get_rule_filter_method.dart'; import 'package:rule_filter/rule_filter/get/get_rule_filter_response.dart'; import 'package:rule_filter/rule_filter/rule_filter_id.dart'; -import 'package:rule_filter/rule_filter/rule_id.dart'; import 'package:rule_filter/rule_filter/set/set_rule_filter_method.dart'; import 'package:rule_filter/rule_filter/tmail_rule.dart'; +import 'package:tmail_ui_user/features/manage_account/data/extensions/list_tmail_rule_extensions.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/edit_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; @@ -149,17 +149,13 @@ class ManageAccountAPI { Future> updateListTMailRule(AccountId accountId, List listTMailRule) async { - final List listTMailRuleWithId = listTMailRule - .asMap() - .map((key, value) => MapEntry(key, value.copyWith(id: RuleId(id: Id(key.toString()))))) - .values - .toList(); + final newListTMailRuleWithIds = listTMailRule.withIds; final processingInvocation = ProcessingInvocation(); final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation); final setRuleFilterMethod = SetRuleFilterMethod(accountId) - ..addUpdateRuleFilter({Id(RuleFilterIdType.singleton.value): listTMailRuleWithId}); + ..addUpdateRuleFilter({Id(RuleFilterIdType.singleton.value): newListTMailRuleWithIds}); requestBuilder.invocation(setRuleFilterMethod); diff --git a/lib/features/manage_account/data/repository/manage_account_repository_impl.dart b/lib/features/manage_account/data/repository/manage_account_repository_impl.dart index 3b01ceddc..e6a5e1c96 100644 --- a/lib/features/manage_account/data/repository/manage_account_repository_impl.dart +++ b/lib/features/manage_account/data/repository/manage_account_repository_impl.dart @@ -7,6 +7,7 @@ import 'package:rule_filter/rule_filter/tmail_rule.dart'; import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.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'; import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; @@ -51,4 +52,9 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository { Future> deleteTMailRule(AccountId accountId, DeleteEmailRuleRequest deleteEmailRuleRequest) { return dataSource.deleteTMailRule(accountId, deleteEmailRuleRequest); } + + @override + Future> createNewEmailRuleFilter(AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest) { + return dataSource.createNewEmailRuleFilter(accountId, ruleFilterRequest); + } } \ No newline at end of file