diff --git a/lib/features/manage_account/data/datasource/manage_account_datasource.dart b/lib/features/manage_account/data/datasource/manage_account_datasource.dart new file mode 100644 index 000000000..469af2fae --- /dev/null +++ b/lib/features/manage_account/data/datasource/manage_account_datasource.dart @@ -0,0 +1,6 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart'; + +abstract class ManageAccountDataSource { + Future getAllIdentities(AccountId accountId); +} \ 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 new file mode 100644 index 000000000..77425c30b --- /dev/null +++ b/lib/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart @@ -0,0 +1,20 @@ +import 'package:jmap_dart_client/jmap/account_id.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'; + +class ManageAccountDataSourceImpl extends ManageAccountDataSource { + + final ManageAccountAPI manageAccountAPI; + + ManageAccountDataSourceImpl(this.manageAccountAPI); + + @override + Future getAllIdentities(AccountId accountId) { + return Future.sync(() async { + return await manageAccountAPI.getAllIdentities(accountId); + }).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 new file mode 100644 index 000000000..20449a805 --- /dev/null +++ b/lib/features/manage_account/data/network/manage_account_api.dart @@ -0,0 +1,33 @@ +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/identities/get/get_identity_method.dart'; +import 'package:jmap_dart_client/jmap/identities/get/get_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'; + +class ManageAccountAPI { + + final HttpClient _httpClient; + + ManageAccountAPI(this._httpClient); + + Future getAllIdentities(AccountId accountId) async { + final processingInvocation = ProcessingInvocation(); + final jmapRequestBuilder = JmapRequestBuilder(_httpClient, processingInvocation); + final getIdentityMethod = GetIdentityMethod(accountId); + final queryInvocation = jmapRequestBuilder.invocation(getIdentityMethod); + + final result = await (jmapRequestBuilder + ..usings(getIdentityMethod.requiredCapabilities)) + .build() + .execute(); + + final response = result.parse( + queryInvocation.methodCallId, + GetIdentityResponse.deserialize); + + return IdentitiesResponse(identities: response?.list, state: response?.state); + } +} \ 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 new file mode 100644 index 000000000..85f373bd4 --- /dev/null +++ b/lib/features/manage_account/data/repository/manage_account_repository_impl.dart @@ -0,0 +1,16 @@ +import 'package:jmap_dart_client/jmap/account_id.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'; + +class ManageAccountRepositoryImpl extends ManageAccountRepository { + + final ManageAccountDataSource dataSource; + + ManageAccountRepositoryImpl(this.dataSource); + + @override + Future getAllIdentities(AccountId accountId) { + return dataSource.getAllIdentities(accountId); + } +} \ No newline at end of file