TF-1625 Get capability supported for Identity/set method
(cherry picked from commit 16a77edba891a628b728d05ddd3a61c9ba45b8dc)
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
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/session/session.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: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 IdentityRepository {
|
||||
Future<IdentitiesResponse> getAllIdentities(AccountId accountId, {Properties? properties});
|
||||
Future<IdentitiesResponse> getAllIdentities(Session session, AccountId accountId, {Properties? properties});
|
||||
|
||||
Future<Identity> createNewIdentity(AccountId accountId, CreateNewIdentityRequest identityRequest);
|
||||
Future<Identity> createNewIdentity(Session session, AccountId accountId, CreateNewIdentityRequest identityRequest);
|
||||
|
||||
Future<bool> deleteIdentity(AccountId accountId, IdentityId identityId);
|
||||
Future<bool> deleteIdentity(Session session, AccountId accountId, IdentityId identityId);
|
||||
|
||||
Future<bool> editIdentity(AccountId accountId, EditIdentityRequest editIdentityRequest);
|
||||
Future<bool> editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest);
|
||||
}
|
||||
+16
-9
@@ -1,9 +1,11 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.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/core/session/session.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';
|
||||
@@ -19,26 +21,31 @@ class CreateNewDefaultIdentityInteractor {
|
||||
this._identityRepository,
|
||||
this._identityUtils);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, CreateNewIdentityRequest identityRequest) async* {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
CreateNewIdentityRequest identityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(CreateNewDefaultIdentityLoading());
|
||||
final listDefaultIdentities = await _getDefaultIdentities(accountId);
|
||||
final listDefaultIdentities = await _getDefaultIdentities(session, accountId);
|
||||
|
||||
final defaultRequest = _createNewIdentityDefault(identityRequest, listDefaultIdentities);
|
||||
|
||||
final newIdentity = await _identityRepository.createNewIdentity(accountId, defaultRequest);
|
||||
final newIdentity = await _identityRepository.createNewIdentity(session, accountId, defaultRequest);
|
||||
yield Right(CreateNewDefaultIdentitySuccess(newIdentity));
|
||||
} catch (exception) {
|
||||
yield Left(CreateNewDefaultIdentityFailure(exception));
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Identity>?> _getDefaultIdentities(AccountId accountId) async {
|
||||
Future<List<Identity>?> _getDefaultIdentities(Session session, AccountId accountId) async {
|
||||
final listIdentities = await _identityRepository
|
||||
.getAllIdentities(
|
||||
accountId,
|
||||
properties: Properties({'sortOrder', 'mayDelete'})
|
||||
);
|
||||
.getAllIdentities(
|
||||
session,
|
||||
accountId,
|
||||
properties: Properties({'sortOrder', 'mayDelete'})
|
||||
);
|
||||
listIdentities.identities?.removeWhere(_isIdentityUnDeletable);
|
||||
return _identityUtils.getSmallestOrderedIdentity(listIdentities.identities);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ 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/session/session.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_identity_state.dart';
|
||||
@@ -12,10 +13,14 @@ class CreateNewIdentityInteractor {
|
||||
|
||||
CreateNewIdentityInteractor(this._identityRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, CreateNewIdentityRequest identityRequest) async* {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
CreateNewIdentityRequest identityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(CreateNewIdentityLoading());
|
||||
final newIdentity = await _identityRepository.createNewIdentity(accountId, identityRequest);
|
||||
final newIdentity = await _identityRepository.createNewIdentity(session, accountId, identityRequest);
|
||||
yield Right(CreateNewIdentitySuccess(newIdentity));
|
||||
} catch (exception) {
|
||||
yield Left(CreateNewIdentityFailure(exception));
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/delete_identity_state.dart';
|
||||
@@ -12,10 +14,14 @@ class DeleteIdentityInteractor {
|
||||
|
||||
DeleteIdentityInteractor(this._identityRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, IdentityId identityId) async* {
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
IdentityId identityId
|
||||
) async* {
|
||||
try {
|
||||
yield Right(DeleteIdentityLoading());
|
||||
final result = await _identityRepository.deleteIdentity(accountId, identityId);
|
||||
final result = await _identityRepository.deleteIdentity(session, accountId, identityId);
|
||||
yield result ? Right(DeleteIdentitySuccess()) : Left(DeleteIdentityFailure(null));
|
||||
} catch (exception) {
|
||||
yield Left(DeleteIdentityFailure(exception));
|
||||
|
||||
@@ -4,6 +4,7 @@ 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/core/session/session.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';
|
||||
@@ -21,13 +22,14 @@ class EditDefaultIdentityInteractor {
|
||||
);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(EditDefaultIdentityLoading());
|
||||
|
||||
final defaultIdentities = await _getDefaultIdentities(accountId);
|
||||
final defaultIdentities = await _getDefaultIdentities(session, accountId);
|
||||
_removeEditIdentityFromDefaultIdentities(defaultIdentities, editIdentityRequest.identityId);
|
||||
|
||||
final editDefaultRequest = EditDefaultIdentityRequest(
|
||||
@@ -38,19 +40,20 @@ class EditDefaultIdentityInteractor {
|
||||
?.map((identity) => identity.id!)
|
||||
.toList());
|
||||
|
||||
final result = await _identityRepository.editIdentity(accountId, editDefaultRequest);
|
||||
final result = await _identityRepository.editIdentity(session, accountId, editDefaultRequest);
|
||||
yield result ? Right(EditDefaultIdentitySuccess()) : Left(EditDefaultIdentityFailure(null));
|
||||
} catch (exception) {
|
||||
yield Left(EditDefaultIdentityFailure(exception));
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Identity>?> _getDefaultIdentities(AccountId accountId) async {
|
||||
Future<List<Identity>?> _getDefaultIdentities(Session session, AccountId accountId) async {
|
||||
final listIdentities = await _identityRepository
|
||||
.getAllIdentities(
|
||||
accountId,
|
||||
properties: Properties({'sortOrder'})
|
||||
);
|
||||
.getAllIdentities(
|
||||
session,
|
||||
accountId,
|
||||
properties: Properties({'sortOrder'})
|
||||
);
|
||||
return _identityUtils
|
||||
.getSmallestOrderedIdentity(listIdentities.identities)
|
||||
?.toList();
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.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_identity_state.dart';
|
||||
@@ -13,12 +15,13 @@ class EditIdentityInteractor {
|
||||
EditIdentityInteractor(this._identityRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
Session session,
|
||||
AccountId accountId,
|
||||
EditIdentityRequest editIdentityRequest
|
||||
) async* {
|
||||
try {
|
||||
yield Right(EditIdentityLoading());
|
||||
final result = await _identityRepository.editIdentity(accountId, editIdentityRequest);
|
||||
final result = await _identityRepository.editIdentity(session, accountId, editIdentityRequest);
|
||||
yield result ? Right(EditIdentitySuccess()) : Left(EditIdentityFailure(null));
|
||||
} catch (exception) {
|
||||
yield Left(EditIdentityFailure(exception));
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.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/presentation/profiles/identities/utils/identity_utils.dart';
|
||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||
|
||||
class GetAllIdentitiesInteractor {
|
||||
final IdentityRepository _identityRepository;
|
||||
@@ -14,11 +18,12 @@ class GetAllIdentitiesInteractor {
|
||||
|
||||
GetAllIdentitiesInteractor(this._identityRepository, this._identityUtils);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, {Properties? properties}) async* {
|
||||
Stream<Either<Failure, Success>> execute(Session session, AccountId accountId, {Properties? properties}) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(GetAllIdentitiesLoading());
|
||||
final identitiesResponse = await _identityRepository.getAllIdentities(accountId, properties: properties);
|
||||
if (identitiesResponse.identities != null) {
|
||||
final identitiesResponse = await _identityRepository.getAllIdentities(session, accountId, properties: properties);
|
||||
final sortOrderIsSupported = [CapabilityIdentifier.jamesSortOrder].isSupported(session, accountId);
|
||||
if (sortOrderIsSupported && identitiesResponse.identities != null) {
|
||||
_identityUtils.sortListIdentities(identitiesResponse.identities!);
|
||||
}
|
||||
yield Right(GetAllIdentitiesSuccess(identitiesResponse.identities, identitiesResponse.state));
|
||||
|
||||
Reference in New Issue
Block a user