TF-3334 Skip getting stored state in interactor when performing actions with email and mailbox

This commit is contained in:
dab246
2024-12-23 16:10:36 +07:00
committed by Dat H. Pham
parent ba93e7b514
commit 01b320ce89
52 changed files with 138 additions and 602 deletions
@@ -1,22 +1,14 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
class SaveEmailAsDraftsLoading extends LoadingState {}
class SaveEmailAsDraftsSuccess extends UIActionState {
class SaveEmailAsDraftsSuccess extends UIState {
final EmailId emailId;
SaveEmailAsDraftsSuccess(
this.emailId,
{
jmap.State? currentEmailState,
jmap.State? currentMailboxState,
}
) : super(currentEmailState, currentMailboxState);
SaveEmailAsDraftsSuccess(this.emailId);
@override
List<Object?> get props => [emailId, ...super.props];
@@ -2,27 +2,22 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.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/core/state.dart' as jmap;
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
class SendEmailLoading extends LoadingState {}
class SendEmailSuccess extends UIActionState {
class SendEmailSuccess extends UIState {
final EmailRequest emailRequest;
SendEmailSuccess({
jmap.State? currentEmailState,
jmap.State? currentMailboxState,
required this.emailRequest,
}) : super(currentEmailState, currentMailboxState);
});
@override
List<Object?> get props => [
...super.props,
emailRequest,
];
}
@@ -1,22 +1,14 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
class UpdatingEmailDrafts extends LoadingState {}
class UpdateEmailDraftsSuccess extends UIActionState {
class UpdateEmailDraftsSuccess extends UIState {
final EmailId emailId;
UpdateEmailDraftsSuccess(
this.emailId,
{
jmap.State? currentEmailState,
jmap.State? currentMailboxState,
}
) : super(currentEmailState, currentMailboxState);
UpdateEmailDraftsSuccess(this.emailId);
@override
List<Object?> get props => [emailId, ...super.props];
@@ -3,9 +3,6 @@ import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart' as dartz;
import 'package:dio/dio.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/core/state.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/compose_email_exception.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
@@ -15,17 +12,14 @@ import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
class CreateNewAndSaveEmailToDraftsInteractor {
final EmailRepository _emailRepository;
final MailboxRepository _mailboxRepository;
final ComposerRepository _composerRepository;
CreateNewAndSaveEmailToDraftsInteractor(
this._emailRepository,
this._mailboxRepository,
this._composerRepository,
);
@@ -36,11 +30,6 @@ class CreateNewAndSaveEmailToDraftsInteractor {
try {
yield dartz.Right<Failure, Success>(GenerateEmailLoading());
final listCurrentState = await _getStoredCurrentState(
session: createEmailRequest.session,
accountId: createEmailRequest.accountId
);
final emailCreated = await _createEmailObject(createEmailRequest);
if (emailCreated != null) {
@@ -55,11 +44,7 @@ class CreateNewAndSaveEmailToDraftsInteractor {
);
yield dartz.Right<Failure, Success>(
SaveEmailAsDraftsSuccess(
emailDraftSaved.id!,
currentMailboxState: listCurrentState?.value1,
currentEmailState: listCurrentState?.value2
)
SaveEmailAsDraftsSuccess(emailDraftSaved.id!)
);
} else {
yield dartz.Right<Failure, Success>(UpdatingEmailDrafts());
@@ -73,11 +58,7 @@ class CreateNewAndSaveEmailToDraftsInteractor {
);
yield dartz.Right<Failure, Success>(
UpdateEmailDraftsSuccess(
emailDraftSaved.id!,
currentMailboxState: listCurrentState?.value1,
currentEmailState: listCurrentState?.value2
)
UpdateEmailDraftsSuccess(emailDraftSaved.id!)
);
}
} else {
@@ -112,24 +93,4 @@ class CreateNewAndSaveEmailToDraftsInteractor {
return null;
}
}
Future<dartz.Tuple2<State?, State?>?> _getStoredCurrentState({
required Session session,
required AccountId accountId
}) async {
try {
final listState = await Future.wait([
_mailboxRepository.getMailboxState(session, accountId),
_emailRepository.getEmailState(session, accountId),
]);
final mailboxState = listState.first;
final emailState = listState.last;
return dartz.Tuple2(mailboxState, emailState);
} catch (e) {
logError('CreateNewAndSaveEmailToDraftsInteractor::_getStoredCurrentState: Exception: $e');
return null;
}
}
}
@@ -5,7 +5,6 @@ import 'package:dartz/dartz.dart' as dartz;
import 'package:dio/dio.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/core/state.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/compose_email_exception.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
@@ -15,18 +14,15 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/create_e
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
import 'package:tmail_ui_user/features/email/domain/exceptions/email_exceptions.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_arguments.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
class CreateNewAndSendEmailInteractor {
final EmailRepository _emailRepository;
final MailboxRepository _mailboxRepository;
final ComposerRepository _composerRepository;
CreateNewAndSendEmailInteractor(
this._emailRepository,
this._mailboxRepository,
this._composerRepository,
);
@@ -38,11 +34,6 @@ class CreateNewAndSendEmailInteractor {
try {
yield dartz.Right<Failure, Success>(GenerateEmailLoading());
final listCurrentState = await _getStoredCurrentState(
session: createEmailRequest.session,
accountId: createEmailRequest.accountId
);
sendingEmailArguments = await _createEmailObject(createEmailRequest);
if (sendingEmailArguments != null) {
@@ -67,8 +58,6 @@ class CreateNewAndSendEmailInteractor {
yield dartz.Right<Failure, Success>(
SendEmailSuccess(
currentMailboxState: listCurrentState?.value1,
currentEmailState: listCurrentState?.value2,
emailRequest: sendingEmailArguments.emailRequest
)
);
@@ -108,26 +97,6 @@ class CreateNewAndSendEmailInteractor {
}
}
Future<dartz.Tuple2<State?, State?>?> _getStoredCurrentState({
required Session session,
required AccountId accountId
}) async {
try {
final listState = await Future.wait([
_mailboxRepository.getMailboxState(session, accountId),
_emailRepository.getEmailState(session, accountId),
]);
final mailboxState = listState.first;
final emailState = listState.last;
return dartz.Tuple2(mailboxState, emailState);
} catch (e) {
logError('CreateNewAndSendEmailInteractor::_getStoredCurrentState: Exception: $e');
return null;
}
}
Future<void> _deleteOldDraftsEmail({
required Session session,
required AccountId accountId,
@@ -7,16 +7,12 @@ import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart'
import 'package:tmail_ui_user/features/composer/domain/state/send_email_state.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
class SendEmailInteractor {
final EmailRepository _emailRepository;
final MailboxRepository _mailboxRepository;
SendEmailInteractor(
this._emailRepository,
this._mailboxRepository);
SendEmailInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(
Session session,
@@ -30,14 +26,6 @@ class SendEmailInteractor {
try {
yield Right<Failure, Success>(SendEmailLoading());
final listState = await Future.wait([
_mailboxRepository.getMailboxState(session, accountId),
_emailRepository.getEmailState(session, accountId),
], eagerError: true);
final currentMailboxState = listState.first;
final currentEmailState = listState.last;
await _emailRepository.sendEmail(
session,
accountId,
@@ -50,11 +38,7 @@ class SendEmailInteractor {
}
yield Right<Failure, Success>(
SendEmailSuccess(
currentEmailState: currentEmailState,
currentMailboxState: currentMailboxState,
emailRequest: emailRequest
)
SendEmailSuccess(emailRequest: emailRequest)
);
} catch (e) {
yield Left<Failure, Success>(SendEmailFailure(
@@ -206,12 +206,10 @@ class ComposerBindings extends BaseBindings {
Get.lazyPut(() => GetAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
Get.lazyPut(() => CreateNewAndSendEmailInteractor(
Get.find<EmailRepository>(),
Get.find<MailboxRepository>(),
Get.find<ComposerRepository>(),
));
Get.lazyPut(() => CreateNewAndSaveEmailToDraftsInteractor(
Get.find<EmailRepository>(),
Get.find<MailboxRepository>(),
Get.find<ComposerRepository>(),
));
Get.lazyPut(() => RestoreEmailInlineImagesInteractor(