From d4ed43a65f64abfb4c601bce4bf8d6b7094af2fa Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 19 Aug 2022 11:56:42 +0700 Subject: [PATCH] TF-832 Add data layer for delete recipient in forwarding --- .../datasource/manage_account_datasource.dart | 3 ++ .../manage_account_datasource_impl.dart | 10 ++++++ .../data/network/manage_account_api.dart | 32 +++++++++++++++++++ .../manage_account_repository_impl.dart | 6 ++++ 4 files changed, 51 insertions(+) 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 fb8ec634f..5fad38cad 100644 --- a/lib/features/manage_account/data/datasource/manage_account_datasource.dart +++ b/lib/features/manage_account/data/datasource/manage_account_datasource.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 ManageAccountDataSource { 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/data/datasource_impl/manage_account_datasource_impl.dart b/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart index ea9def7cd..6118dcf30 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 @@ -12,6 +12,7 @@ import 'package:tmail_ui_user/features/manage_account/data/network/manage_accoun 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'; @@ -135,4 +136,13 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { throw error; }); } + + @override + Future deleteRecipientInForwarding(AccountId accountId, DeleteRecipientInForwardingRequest deleteRequest) { + return Future.sync(() async { + return await manageAccountAPI.updateForward(accountId, deleteRequest.newTMailForward); + }).catchError((error) { + throw error; + }); + } } \ 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 83fa031f9..3f9711655 100644 --- a/lib/features/manage_account/data/network/manage_account_api.dart +++ b/lib/features/manage_account/data/network/manage_account_api.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:forward/forward/forward_id.dart'; import 'package:forward/forward/get/get_forward_method.dart'; import 'package:forward/forward/get/get_forward_response.dart'; +import 'package:forward/forward/set/set_forward_method.dart'; import 'package:forward/forward/tmail_forward.dart'; import 'package:jmap_dart_client/http/http_client.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; @@ -260,4 +261,35 @@ class ManageAccountAPI { return resultList?.list ?? []; } + + Future updateForward(AccountId accountId, TMailForward forward) async { + final setForwardMethod = SetForwardMethod(accountId) + ..addUpdatesSingleton({ + ForwardIdSingleton.forwardIdSingleton.id : forward + }); + + final processingInvocation = ProcessingInvocation(); + final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation) + ..invocation(setForwardMethod); + + final getForwardMethod = GetForwardMethod(accountId) + ..addIds({ForwardIdSingleton.forwardIdSingleton.id}); + final getForwardInvocation = requestBuilder.invocation(getForwardMethod); + + final response = await (requestBuilder + ..usings(setForwardMethod.requiredCapabilities)) + .build() + .execute(); + + final getForwardResponse = response.parse( + getForwardInvocation.methodCallId, + GetForwardResponse.deserialize); + + final newForward = getForwardResponse?.list.first; + if (newForward == null) { + throw NotFoundForwardException(); + } + + return newForward; + } } \ No newline at end of file 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 5b4446cae..7cdebc22b 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 @@ -10,6 +10,7 @@ import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_acc 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'; @@ -80,4 +81,9 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository { Future> updateVacation(AccountId accountId, VacationResponse vacationResponse) { return dataSource.updateVacation(accountId, vacationResponse); } + + @override + Future deleteRecipientInForwarding(AccountId accountId, DeleteRecipientInForwardingRequest deleteRequest) { + return dataSource.deleteRecipientInForwarding(accountId, deleteRequest); + } } \ No newline at end of file