TF-1866 Add abstraction method for delete sending email
(cherry picked from commit c4a9fce0c08ce0c6976bc367ade567430fbfcff3)
This commit is contained in:
@@ -14,4 +14,9 @@ class SendingQueueRepositoryImpl extends SendingQueueRepository {
|
|||||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false}) {
|
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false}) {
|
||||||
return _emailHiveCacheDataSourceImpl.getAllSendingEmails(accountId, userName, needToReopen: needToReopen);
|
return _emailHiveCacheDataSourceImpl.getAllSendingEmails(accountId, userName, needToReopen: needToReopen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId) {
|
||||||
|
return _emailHiveCacheDataSourceImpl.deleteSendingEmail(accountId, userName, sendingId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -5,4 +5,6 @@ import 'package:tmail_ui_user/features/composer/domain/model/sending_email.dart'
|
|||||||
|
|
||||||
abstract class SendingQueueRepository {
|
abstract class SendingQueueRepository {
|
||||||
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false});
|
Future<List<SendingEmail>> getAllSendingEmails(AccountId accountId, UserName userName, {bool needToReopen = false});
|
||||||
|
|
||||||
|
Future<void> deleteSendingEmail(AccountId accountId, UserName userName, String sendingId);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
|
||||||
|
class DeleteMultipleSendingEmailLoading extends UIState {}
|
||||||
|
|
||||||
|
class DeleteMultipleSendingEmailAllSuccess extends UIState {}
|
||||||
|
|
||||||
|
class DeleteMultipleSendingEmailHasSomeSuccess extends UIState {}
|
||||||
|
|
||||||
|
class DeleteMultipleSendingEmailAllFailure extends FeatureFailure {
|
||||||
|
|
||||||
|
DeleteMultipleSendingEmailAllFailure(dynamic exception) : super(exception: exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [exception];
|
||||||
|
}
|
||||||
|
|
||||||
|
class DeleteMultipleSendingEmailFailure extends FeatureFailure {
|
||||||
|
|
||||||
|
DeleteMultipleSendingEmailFailure(dynamic exception) : super(exception: exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [exception];
|
||||||
|
}
|
||||||
+36
@@ -0,0 +1,36 @@
|
|||||||
|
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/user_name.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/state/delete_multiple_sending_email_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/delete_single_sending_email_interactor.dart';
|
||||||
|
|
||||||
|
class DeleteMultipleSendingEmailInteractor {
|
||||||
|
final DeleteSingleSendingEmailInteractor _deleteSingleSendingEmailInteractor;
|
||||||
|
|
||||||
|
DeleteMultipleSendingEmailInteractor(this._deleteSingleSendingEmailInteractor);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute(AccountId accountId, UserName userName, List<String> sendingIds) async* {
|
||||||
|
try {
|
||||||
|
yield Right<Failure, Success>(DeleteMultipleSendingEmailLoading());
|
||||||
|
final listResult = await Future.wait(
|
||||||
|
sendingIds.map((sendingId) => _deleteSingleSendingEmailInteractor.execute(accountId, userName, sendingId)),
|
||||||
|
eagerError: true
|
||||||
|
);
|
||||||
|
|
||||||
|
bool isAllSuccess = listResult.every((either) => either.isRight());
|
||||||
|
bool isAllFailure = listResult.every((either) => either.isLeft());
|
||||||
|
|
||||||
|
if (isAllSuccess) {
|
||||||
|
yield Right<Failure, Success>(DeleteMultipleSendingEmailAllSuccess());
|
||||||
|
} else if (isAllFailure) {
|
||||||
|
yield Left<Failure, Success>(DeleteMultipleSendingEmailAllFailure(null));
|
||||||
|
} else {
|
||||||
|
yield Right<Failure, Success>(DeleteMultipleSendingEmailHasSomeSuccess());
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
yield Left<Failure, Success>(DeleteMultipleSendingEmailFailure(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
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/user_name.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/state/delete_sending_email_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
|
||||||
|
|
||||||
|
class DeleteSingleSendingEmailInteractor {
|
||||||
|
final SendingQueueRepository _sendingQueueRepository;
|
||||||
|
|
||||||
|
DeleteSingleSendingEmailInteractor(this._sendingQueueRepository);
|
||||||
|
|
||||||
|
Future<Either<Failure, Success>> execute(AccountId accountId, UserName userName, String sendingId) async {
|
||||||
|
try {
|
||||||
|
await _sendingQueueRepository.deleteSendingEmail(accountId, userName, sendingId);
|
||||||
|
return Right<Failure, Success>(DeleteSendingEmailSuccess());
|
||||||
|
} catch (e) {
|
||||||
|
return Left<Failure, Success>(DeleteSendingEmailFailure(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user