Tf-1194 edit default identity: add editDefaultIdentityInteractor

This commit is contained in:
sherlockvn
2023-01-17 14:49:22 +07:00
committed by Dat Vu
parent a84db37ea6
commit c6ecf69e83
2 changed files with 86 additions and 0 deletions
@@ -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);
}
}