From 4d6fdca187893d17deea53e0af9f423b3f6da488 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 26 Apr 2022 09:30:38 +0700 Subject: [PATCH] TF-460 Add domain layer for implement get all identities --- .../domain/model/identities_response.dart | 23 +++++++++++++++++++ .../repository/manage_account_repository.dart | 6 +++++ .../state/get_all_identities_state.dart | 22 ++++++++++++++++++ .../get_all_identities_interactor.dart | 23 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 lib/features/manage_account/domain/model/identities_response.dart create mode 100644 lib/features/manage_account/domain/repository/manage_account_repository.dart create mode 100644 lib/features/manage_account/domain/state/get_all_identities_state.dart create mode 100644 lib/features/manage_account/domain/usecases/get_all_identities_interactor.dart diff --git a/lib/features/manage_account/domain/model/identities_response.dart b/lib/features/manage_account/domain/model/identities_response.dart new file mode 100644 index 000000000..8c8412861 --- /dev/null +++ b/lib/features/manage_account/domain/model/identities_response.dart @@ -0,0 +1,23 @@ + +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/core/state.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; + +class IdentitiesResponse with EquatableMixin { + final List? identities; + final State? state; + + IdentitiesResponse({ + this.identities, + this.state + }); + + bool hasData() { + return identities != null + && identities!.isNotEmpty + && state != null; + } + + @override + List get props => [identities, state]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/repository/manage_account_repository.dart b/lib/features/manage_account/domain/repository/manage_account_repository.dart new file mode 100644 index 000000000..4dce6937a --- /dev/null +++ b/lib/features/manage_account/domain/repository/manage_account_repository.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 ManageAccountRepository { + Future getAllIdentities(AccountId accountId); +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/get_all_identities_state.dart b/lib/features/manage_account/domain/state/get_all_identities_state.dart new file mode 100644 index 000000000..8852e3400 --- /dev/null +++ b/lib/features/manage_account/domain/state/get_all_identities_state.dart @@ -0,0 +1,22 @@ +import 'package:core/core.dart'; +import 'package:jmap_dart_client/jmap/core/state.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; + +class GetAllIdentitiesSuccess extends UIState { + final List? identities; + final State? state; + + GetAllIdentitiesSuccess(this.identities, this.state); + + @override + List get props => [identities, state]; +} + +class GetAllIdentitiesFailure extends FeatureFailure { + final dynamic exception; + + GetAllIdentitiesFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/get_all_identities_interactor.dart b/lib/features/manage_account/domain/usecases/get_all_identities_interactor.dart new file mode 100644 index 000000000..38e2a7b60 --- /dev/null +++ b/lib/features/manage_account/domain/usecases/get_all_identities_interactor.dart @@ -0,0 +1,23 @@ +import 'dart:core'; + +import 'package:core/core.dart'; +import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart'; + +class GetAllIdentitiesInteractor { + final ManageAccountRepository manageAccountRepository; + + GetAllIdentitiesInteractor(this.manageAccountRepository); + + Stream> execute(AccountId accountId) async* { + try { + yield Right(LoadingState()); + final identitiesResponse = await manageAccountRepository.getAllIdentities(accountId); + yield Right(GetAllIdentitiesSuccess(identitiesResponse.identities, identitiesResponse.state)); + } catch (exception) { + yield Left(GetAllIdentitiesFailure(exception)); + } + } +} \ No newline at end of file