TF-1194 create new default identity: add interactor and state for create new default identity
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
import 'package:core/core.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||||
|
|
||||||
|
class CreateNewDefaultIdentityLoading extends UIState {}
|
||||||
|
|
||||||
|
class CreateNewDefaultIdentitySuccess extends UIState {
|
||||||
|
|
||||||
|
final Identity newIdentity;
|
||||||
|
|
||||||
|
CreateNewDefaultIdentitySuccess(this.newIdentity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [newIdentity];
|
||||||
|
}
|
||||||
|
|
||||||
|
class CreateNewDefaultIdentityFailure extends FeatureFailure {
|
||||||
|
final dynamic exception;
|
||||||
|
|
||||||
|
CreateNewDefaultIdentityFailure(this.exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [exception];
|
||||||
|
}
|
||||||
+56
@@ -0,0 +1,56 @@
|
|||||||
|
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/core/properties/properties.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_default_identity_request.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/identity_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_default_identity_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/utils/identity_utils.dart';
|
||||||
|
|
||||||
|
class CreateNewDefaultIdentityInteractor {
|
||||||
|
final IdentityRepository _identityRepository;
|
||||||
|
final IdentityUtils _identityUtils;
|
||||||
|
|
||||||
|
CreateNewDefaultIdentityInteractor(
|
||||||
|
this._identityRepository,
|
||||||
|
this._identityUtils);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute(AccountId accountId, CreateNewIdentityRequest identityRequest) async* {
|
||||||
|
try {
|
||||||
|
yield Right(CreateNewDefaultIdentityLoading());
|
||||||
|
final listDefaultIdentities = await _getDefaultIdentities(accountId);
|
||||||
|
|
||||||
|
final defaultRequest = _createNewIdentityDefault(identityRequest, listDefaultIdentities);
|
||||||
|
|
||||||
|
final newIdentity = await _identityRepository.createNewIdentity(accountId, defaultRequest);
|
||||||
|
yield Right(CreateNewDefaultIdentitySuccess(newIdentity));
|
||||||
|
} catch (exception) {
|
||||||
|
yield Left(CreateNewDefaultIdentityFailure(exception));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<Identity>?> _getDefaultIdentities(AccountId accountId) async {
|
||||||
|
final listIdentities = await _identityRepository
|
||||||
|
.getAllIdentities(
|
||||||
|
accountId,
|
||||||
|
properties: Properties({'sortOrder'})
|
||||||
|
);
|
||||||
|
return _identityUtils.getSmallestOrderedIdentity(listIdentities.identities);
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateNewDefaultIdentityRequest _createNewIdentityDefault(
|
||||||
|
CreateNewIdentityRequest identityRequest,
|
||||||
|
List<Identity>? listDefaultIdentities,
|
||||||
|
) {
|
||||||
|
return CreateNewDefaultIdentityRequest(
|
||||||
|
identityRequest.creationId,
|
||||||
|
identityRequest.newIdentity,
|
||||||
|
oldDefaultIdentityIds: listDefaultIdentities
|
||||||
|
?.map((identity) => identity.id!)
|
||||||
|
.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,16 +6,21 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/utils/identity_utils.dart';
|
||||||
|
|
||||||
class GetAllIdentitiesInteractor {
|
class GetAllIdentitiesInteractor {
|
||||||
final IdentityRepository _identityRepository;
|
final IdentityRepository _identityRepository;
|
||||||
|
final IdentityUtils _identityUtils;
|
||||||
|
|
||||||
GetAllIdentitiesInteractor(this._identityRepository);
|
GetAllIdentitiesInteractor(this._identityRepository, this._identityUtils);
|
||||||
|
|
||||||
Stream<Either<Failure, Success>> execute(AccountId accountId, {Properties? properties}) async* {
|
Stream<Either<Failure, Success>> execute(AccountId accountId, {Properties? properties}) async* {
|
||||||
try {
|
try {
|
||||||
yield Right<Failure, Success>(GetAllIdentitiesLoading());
|
yield Right<Failure, Success>(GetAllIdentitiesLoading());
|
||||||
final identitiesResponse = await _identityRepository.getAllIdentities(accountId, properties: properties);
|
final identitiesResponse = await _identityRepository.getAllIdentities(accountId, properties: properties);
|
||||||
|
if (identitiesResponse.identities != null) {
|
||||||
|
_identityUtils.sortListIdentities(identitiesResponse.identities!);
|
||||||
|
}
|
||||||
yield Right(GetAllIdentitiesSuccess(identitiesResponse.identities, identitiesResponse.state));
|
yield Right(GetAllIdentitiesSuccess(identitiesResponse.identities, identitiesResponse.state));
|
||||||
} catch (exception) {
|
} catch (exception) {
|
||||||
yield Left(GetAllIdentitiesFailure(exception));
|
yield Left(GetAllIdentitiesFailure(exception));
|
||||||
|
|||||||
Reference in New Issue
Block a user