From 32f99fcca275a44f4ce8ad2bd6198cb494e6b492 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 5 May 2022 09:09:39 +0700 Subject: [PATCH] TF-527 Add data layer in add new identity --- .../datasource/manage_account_datasource.dart | 4 +++ .../manage_account_datasource_impl.dart | 10 ++++++++ .../data/network/manage_account_api.dart | 25 +++++++++++++++++++ .../manage_account_repository_impl.dart | 6 +++++ 4 files changed, 45 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 dffb4da3c..bc43a0f49 100644 --- a/lib/features/manage_account/data/datasource/manage_account_datasource.dart +++ b/lib/features/manage_account/data/datasource/manage_account_datasource.dart @@ -1,9 +1,13 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; abstract class ManageAccountDataSource { Future getAllIdentities(AccountId accountId); + Future createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest); + Future deleteIdentity(AccountId accountId, IdentityId identityId); } \ 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 90d18a71f..5728ca284 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 @@ -2,6 +2,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart'; 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/identities_response.dart'; class ManageAccountDataSourceImpl extends ManageAccountDataSource { @@ -19,6 +20,15 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { }); } + @override + Future createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest) { + return Future.sync(() async { + return await manageAccountAPI.createNewIdentity(accountId, identityRequest); + }).catchError((error) { + throw error; + }); + } + @override Future deleteIdentity(AccountId accountId, IdentityId identityId) { return Future.sync(() async { 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 c307a5617..2569c007c 100644 --- a/lib/features/manage_account/data/network/manage_account_api.dart +++ b/lib/features/manage_account/data/network/manage_account_api.dart @@ -8,6 +8,7 @@ import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/identities/set/set_identity_method.dart'; import 'package:jmap_dart_client/jmap/identities/set/set_identity_response.dart'; import 'package:jmap_dart_client/jmap/jmap_request.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/identities_response.dart'; class ManageAccountAPI { @@ -34,6 +35,30 @@ class ManageAccountAPI { return IdentitiesResponse(identities: response?.list, state: response?.state); } + Future createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest) async { + final setIdentityMethod = SetIdentityMethod(accountId) + ..addCreate(identityRequest.creationId, identityRequest.newIdentity); + + final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation()); + + final setIdentityInvocation = requestBuilder.invocation(setIdentityMethod); + + final response = await (requestBuilder + ..usings(setIdentityMethod.requiredCapabilities)) + .build() + .execute(); + + final setIdentityResponse = response.parse( + setIdentityInvocation.methodCallId, + SetIdentityResponse.deserialize); + + return Future.sync(() async { + return setIdentityResponse!.created![identityRequest.creationId]!; + }).catchError((error) { + throw error; + }); + } + Future deleteIdentity(AccountId accountId, IdentityId identityId) async { final setIdentityMethod = SetIdentityMethod(accountId) ..addDestroy({identityId.id}); 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 0c5cc709e..b896eb6a8 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 @@ -1,6 +1,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/identities/identity.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/identities_response.dart'; import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; @@ -15,6 +16,11 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository { return dataSource.getAllIdentities(accountId); } + @override + Future createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest) { + return dataSource.createNewIdentity(accountId, identityRequest); + } + @override Future deleteIdentity(AccountId accountId, IdentityId identityId) { return dataSource.deleteIdentity(accountId, identityId);