Tf-1194 edit default identity: add editDefaultIdentityInteractor
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/edit_identity_state.dart';
|
||||
|
||||
class EditDefaultIdentityLoading extends UIState {}
|
||||
|
||||
class EditDefaultIdentitySuccess extends EditIdentitySuccess {
|
||||
|
||||
EditDefaultIdentitySuccess();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class EditDefaultIdentityFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
EditDefaultIdentityFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
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/edit_default_identity_request.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/identity_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/edit_default_identity_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/utils/identity_utils.dart';
|
||||
|
||||
class EditDefaultIdentityInteractor {
|
||||
final IdentityRepository _identityRepository;
|
||||
final IdentityUtils _identityUtils;
|
||||
|
||||
EditDefaultIdentityInteractor(
|
||||
this._identityRepository,
|
||||
this._identityUtils
|
||||
);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(EditDefaultIdentityLoading());
|
||||
|
||||
final defaultIdentities = await _getDefaultIdentities(accountId);
|
||||
_removeEditIdentityFromDefaultIdentities(defaultIdentities, editIdentityRequest.identityId);
|
||||
|
||||
final editDefaultRequest = EditDefaultIdentityRequest(
|
||||
identityId: editIdentityRequest.identityId,
|
||||
identityRequest: editIdentityRequest.identityRequest,
|
||||
isDefaultIdentity: editIdentityRequest.isDefaultIdentity,
|
||||
oldDefaultIdentityIds: defaultIdentities
|
||||
?.map((identity) => identity.id!)
|
||||
.toList());
|
||||
|
||||
final result = await _identityRepository.editIdentity(accountId, editDefaultRequest);
|
||||
yield result ? Right(EditDefaultIdentitySuccess()) : Left(EditDefaultIdentityFailure(null));
|
||||
} catch (exception) {
|
||||
yield Left(EditDefaultIdentityFailure(exception));
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Identity>?> _getDefaultIdentities(AccountId accountId) async {
|
||||
final listIdentities = await _identityRepository
|
||||
.getAllIdentities(
|
||||
accountId,
|
||||
properties: Properties({'sortOrder'})
|
||||
);
|
||||
return _identityUtils
|
||||
.getSmallestOrderedIdentity(listIdentities.identities)
|
||||
?.toList();
|
||||
}
|
||||
|
||||
void _removeEditIdentityFromDefaultIdentities(
|
||||
List<Identity>? defaultIdentities,
|
||||
IdentityId editIdentityId
|
||||
) {
|
||||
defaultIdentities?.removeWhere((identity) => identity.id == editIdentityId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user