TF-1897 Implement resend sending email when failed

(cherry picked from commit f508b65688503e9ae8ece5a1924e84481b98a39e)
This commit is contained in:
dab246
2023-06-10 19:20:30 +07:00
committed by Dat Vu
parent b6528b5bf5
commit c5bd77f800
16 changed files with 338 additions and 129 deletions
@@ -0,0 +1,38 @@
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/data/exceptions/sending_queue_exceptions.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/repository/sending_queue_repository.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/state/update_multiple_sending_email_state.dart';
class UpdateMultipleSendingEmailInteractor {
final SendingQueueRepository _sendingQueueRepository;
UpdateMultipleSendingEmailInteractor(this._sendingQueueRepository);
Stream<Either<Failure, Success>> execute(
AccountId accountId,
UserName userName,
List<SendingEmail> newSendingEmails
) async* {
try {
yield Right<Failure, Success>(UpdateMultipleSendingEmailLoading());
final storedSendingEmails = await _sendingQueueRepository.updateMultipleSendingEmail(
accountId,
userName,
newSendingEmails);
if (storedSendingEmails.length == newSendingEmails.length) {
yield Right<Failure, Success>(UpdateMultipleSendingEmailAllSuccess(storedSendingEmails));
} else if (storedSendingEmails.isEmpty) {
yield Left<Failure, Success>(UpdateMultipleSendingEmailAllFailure(NotFoundSendingEmailHiveObject()));
} else {
yield Right<Failure, Success>(UpdateMultipleSendingEmailHasSomeSuccess(storedSendingEmails));
}
} catch (e) {
yield Left<Failure, Success>(UpdateMultipleSendingEmailFailure(e));
}
}
}
@@ -15,12 +15,11 @@ class UpdateSendingEmailInteractor {
Stream<Either<Failure, Success>> execute(
AccountId accountId,
UserName userName,
SendingEmail newSendingEmail,
{bool needToReopen = false}
SendingEmail newSendingEmail
) async* {
try {
yield Right<Failure, Success>(UpdateSendingEmailLoading());
final storedSendingEmail = await _sendingQueueRepository.updateSendingEmail(accountId, userName, newSendingEmail, needToReopen: needToReopen);
final storedSendingEmail = await _sendingQueueRepository.updateSendingEmail(accountId, userName, newSendingEmail);
yield Right<Failure, Success>(UpdateSendingEmailSuccess(storedSendingEmail));
} catch (e) {
yield Left<Failure, Success>(UpdateSendingEmailFailure(e));