diff --git a/lib/features/manage_account/domain/model/create_new_identity_request.dart b/lib/features/manage_account/domain/model/create_new_identity_request.dart new file mode 100644 index 000000000..34c32cb79 --- /dev/null +++ b/lib/features/manage_account/domain/model/create_new_identity_request.dart @@ -0,0 +1,15 @@ + +import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; + +class CreateNewIdentityRequest with EquatableMixin { + + final Identity newIdentity; + final Id creationId; + + CreateNewIdentityRequest(this.creationId, this.newIdentity); + + @override + List get props => [creationId, 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 80174efeb..d12e87b27 100644 --- a/lib/features/manage_account/domain/repository/manage_account_repository.dart +++ b/lib/features/manage_account/domain/repository/manage_account_repository.dart @@ -1,9 +1,13 @@ 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/identities_response.dart'; abstract class ManageAccountRepository { Future getAllIdentities(AccountId accountId); + Future createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest); + Future deleteIdentity(AccountId accountId, IdentityId identityId); } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/create_new_identity_state.dart b/lib/features/manage_account/domain/state/create_new_identity_state.dart new file mode 100644 index 000000000..f1761d5c3 --- /dev/null +++ b/lib/features/manage_account/domain/state/create_new_identity_state.dart @@ -0,0 +1,21 @@ +import 'package:core/core.dart'; +import 'package:jmap_dart_client/jmap/identities/identity.dart'; + +class CreateNewIdentitySuccess extends UIState { + + final Identity newIdentity; + + CreateNewIdentitySuccess(this.newIdentity); + + @override + List get props => [newIdentity]; +} + +class CreateNewIdentityFailure extends FeatureFailure { + final dynamic exception; + + CreateNewIdentityFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/create_new_identity_interactor.dart b/lib/features/manage_account/domain/usecases/create_new_identity_interactor.dart new file mode 100644 index 000000000..c25a62c20 --- /dev/null +++ b/lib/features/manage_account/domain/usecases/create_new_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/create_new_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/create_new_identity_state.dart'; + +class CreateNewIdentityInteractor { + final ManageAccountRepository manageAccountRepository; + + CreateNewIdentityInteractor(this.manageAccountRepository); + + Stream> execute(AccountId accountId, CreateNewIdentityRequest identityRequest) async* { + try { + final newIdentity = await manageAccountRepository.createNewIdentity(accountId, identityRequest); + yield Right(CreateNewIdentitySuccess(newIdentity)); + } catch (exception) { + yield Left(CreateNewIdentityFailure(exception)); + } + } +} \ No newline at end of file