From ed6dd0ca5aab90c177d79ef55a413b35cee781c8 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 6 May 2022 15:13:22 +0700 Subject: [PATCH] TF-536 Add domain layer for edit identity --- .../domain/model/edit_identity_request.dart | 14 +++++++++++ .../repository/manage_account_repository.dart | 4 +++- .../domain/state/edit_identity_state.dart | 21 +++++++++++++++++ .../usecases/edit_identity_interactor.dart | 23 +++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 lib/features/manage_account/domain/model/edit_identity_request.dart create mode 100644 lib/features/manage_account/domain/state/edit_identity_state.dart create mode 100644 lib/features/manage_account/domain/usecases/edit_identity_interactor.dart diff --git a/lib/features/manage_account/domain/model/edit_identity_request.dart b/lib/features/manage_account/domain/model/edit_identity_request.dart new file mode 100644 index 000000000..d1888d7df --- /dev/null +++ b/lib/features/manage_account/domain/model/edit_identity_request.dart @@ -0,0 +1,14 @@ + +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; + +class EditIdentityRequest with EquatableMixin { + + final Identity newIdentity; + final IdentityId identityId; + + EditIdentityRequest(this.identityId, this.newIdentity); + + @override + List get props => [identityId, newIdentity]; +} \ 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 index d12e87b27..2c44065e7 100644 --- a/lib/features/manage_account/domain/repository/manage_account_repository.dart +++ b/lib/features/manage_account/domain/repository/manage_account_repository.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 ManageAccountRepository { @@ -10,4 +10,6 @@ abstract class ManageAccountRepository { 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/domain/state/edit_identity_state.dart b/lib/features/manage_account/domain/state/edit_identity_state.dart new file mode 100644 index 000000000..31278007b --- /dev/null +++ b/lib/features/manage_account/domain/state/edit_identity_state.dart @@ -0,0 +1,21 @@ +import 'package:core/core.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; + +class EditIdentitySuccess extends UIState { + + final Identity newIdentity; + + EditIdentitySuccess(this.newIdentity); + + @override + List get props => [newIdentity]; +} + +class EditIdentityFailure extends FeatureFailure { + final dynamic exception; + + EditIdentityFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/edit_identity_interactor.dart b/lib/features/manage_account/domain/usecases/edit_identity_interactor.dart new file mode 100644 index 000000000..06f236712 --- /dev/null +++ b/lib/features/manage_account/domain/usecases/edit_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:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.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/edit_identity_state.dart'; + +class EditIdentityInteractor { + final ManageAccountRepository manageAccountRepository; + + EditIdentityInteractor(this.manageAccountRepository); + + Stream> execute(AccountId accountId, EditIdentityRequest identityRequest) async* { + try { + final newIdentity = await manageAccountRepository.editIdentity(accountId, identityRequest); + yield Right(EditIdentitySuccess(newIdentity)); + } catch (exception) { + yield Left(EditIdentityFailure(exception)); + } + } +} \ No newline at end of file