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 469af2fae..dffb4da3c 100644 --- a/lib/features/manage_account/data/datasource/manage_account_datasource.dart +++ b/lib/features/manage_account/data/datasource/manage_account_datasource.dart @@ -1,6 +1,9 @@ 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/identities_response.dart'; abstract class ManageAccountDataSource { Future getAllIdentities(AccountId accountId); + + 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 77425c30b..90d18a71f 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 @@ -1,4 +1,5 @@ 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/identities_response.dart'; @@ -17,4 +18,13 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource { throw error; }); } + + @override + Future deleteIdentity(AccountId accountId, IdentityId identityId) { + return Future.sync(() async { + return await manageAccountAPI.deleteIdentity(accountId, identityId); + }).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 20449a805..c307a5617 100644 --- a/lib/features/manage_account/data/network/manage_account_api.dart +++ b/lib/features/manage_account/data/network/manage_account_api.dart @@ -4,6 +4,9 @@ import 'package:jmap_dart_client/http/http_client.dart'; import 'package:jmap_dart_client/jmap/account_id.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'; +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/identities_response.dart'; @@ -30,4 +33,28 @@ class ManageAccountAPI { return IdentitiesResponse(identities: response?.list, state: response?.state); } + + Future deleteIdentity(AccountId accountId, IdentityId identityId) async { + final setIdentityMethod = SetIdentityMethod(accountId) + ..addDestroy({identityId.id}); + + 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?.destroyed?.contains(identityId.id) == true; + }).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 85f373bd4..0c5cc709e 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,4 +1,5 @@ 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/identities_response.dart'; import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; @@ -13,4 +14,9 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository { Future getAllIdentities(AccountId accountId) { return dataSource.getAllIdentities(accountId); } + + @override + Future deleteIdentity(AccountId accountId, IdentityId identityId) { + return dataSource.deleteIdentity(accountId, identityId); + } } \ No newline at end of file