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 bc43a0f49..a7906d506 100644 --- a/lib/features/manage_account/data/datasource/manage_account_datasource.dart +++ b/lib/features/manage_account/data/datasource/manage_account_datasource.dart @@ -1,7 +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/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/edit_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; abstract class ManageAccountDataSource { @@ -10,4 +10,6 @@ abstract class ManageAccountDataSource { Future createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest); Future deleteIdentity(AccountId accountId, IdentityId identityId); + + Future editIdentity(AccountId accountId, EditIdentityRequest identityRequest); } \ 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 5728ca284..ec6d5531a 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 @@ -3,6 +3,7 @@ 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/edit_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; class ManageAccountDataSourceImpl extends ManageAccountDataSource { @@ -37,4 +38,13 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { throw error; }); } + + @override + Future editIdentity(AccountId accountId, EditIdentityRequest identityRequest) { + return Future.sync(() async { + return await manageAccountAPI.editIdentity(accountId, identityRequest); + }).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 2569c007c..a5e3c42c4 100644 --- a/lib/features/manage_account/data/network/manage_account_api.dart +++ b/lib/features/manage_account/data/network/manage_account_api.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:jmap_dart_client/http/http_client.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/patch_object.dart'; import 'package:jmap_dart_client/jmap/identities/get/get_identity_method.dart'; import 'package:jmap_dart_client/jmap/identities/get/get_identity_response.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; @@ -9,6 +10,7 @@ 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/edit_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; class ManageAccountAPI { @@ -82,4 +84,30 @@ class ManageAccountAPI { throw error; }); } + + Future editIdentity(AccountId accountId, EditIdentityRequest identityRequest) async { + final setIdentityMethod = SetIdentityMethod(accountId) + ..addUpdates({ + identityRequest.identityId.id : PatchObject({}) + }); + + 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!.updated![identityRequest.identityId]!; + }).catchError((error) { + throw error; + }); + } } \ 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 b896eb6a8..f29392b67 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 @@ -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/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'; import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; @@ -25,4 +26,9 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository { Future deleteIdentity(AccountId accountId, IdentityId identityId) { return dataSource.deleteIdentity(accountId, identityId); } + + @override + Future editIdentity(AccountId accountId, EditIdentityRequest identityRequest) { + return dataSource.editIdentity(accountId, identityRequest); + } } \ No newline at end of file