From 3e4908ab9804a8999a61b0bf837f503207b0a61a Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 5 May 2022 15:07:52 +0700 Subject: [PATCH] TF-537 Add domain layer for delete a identity --- .../repository/manage_account_repository.dart | 3 +++ .../domain/state/delete_identity_state.dart | 18 +++++++++++++++ .../usecases/delete_identity_interactor.dart | 23 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 lib/features/manage_account/domain/state/delete_identity_state.dart create mode 100644 lib/features/manage_account/domain/usecases/delete_identity_interactor.dart diff --git a/lib/features/manage_account/domain/repository/manage_account_repository.dart b/lib/features/manage_account/domain/repository/manage_account_repository.dart index 4dce6937a..80174efeb 100644 --- a/lib/features/manage_account/domain/repository/manage_account_repository.dart +++ b/lib/features/manage_account/domain/repository/manage_account_repository.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 ManageAccountRepository { Future getAllIdentities(AccountId accountId); + + Future deleteIdentity(AccountId accountId, IdentityId identityId); } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/delete_identity_state.dart b/lib/features/manage_account/domain/state/delete_identity_state.dart new file mode 100644 index 000000000..7d973c5bf --- /dev/null +++ b/lib/features/manage_account/domain/state/delete_identity_state.dart @@ -0,0 +1,18 @@ +import 'package:core/core.dart'; + +class DeleteIdentitySuccess extends UIState { + + DeleteIdentitySuccess(); + + @override + List get props => []; +} + +class DeleteIdentityFailure extends FeatureFailure { + final dynamic exception; + + DeleteIdentityFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/delete_identity_interactor.dart b/lib/features/manage_account/domain/usecases/delete_identity_interactor.dart new file mode 100644 index 000000000..820cc5d24 --- /dev/null +++ b/lib/features/manage_account/domain/usecases/delete_identity_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:jmap_dart_client/jmap/identities/identity.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/delete_identity_state.dart'; + +class DeleteIdentityInteractor { + final ManageAccountRepository manageAccountRepository; + + DeleteIdentityInteractor(this.manageAccountRepository); + + Stream> execute(AccountId accountId, IdentityId identityId) async* { + try { + final result = await manageAccountRepository.deleteIdentity(accountId, identityId); + yield result ? Right(DeleteIdentitySuccess()) : Left(DeleteIdentityFailure(null)); + } catch (exception) { + yield Left(DeleteIdentityFailure(exception)); + } + } +} \ No newline at end of file