TF-2667 Handle error better when perform save as drafts

This commit is contained in:
dab246
2024-03-22 02:24:49 +07:00
committed by Dat H. Pham
parent 5caf08290b
commit 31ff28d7d2
2 changed files with 24 additions and 58 deletions
@@ -72,13 +72,6 @@ class CreateNewAndSaveEmailToDraftsInteractor {
cancelToken: cancelToken
);
await _deleteOldDraftsEmail(
session: createEmailRequest.session,
accountId: createEmailRequest.accountId,
draftEmailId: createEmailRequest.draftsEmailId!,
cancelToken: cancelToken
);
yield dartz.Right<Failure, Success>(
UpdateEmailDraftsSuccess(
emailDraftSaved.id!,
@@ -137,22 +130,4 @@ class CreateNewAndSaveEmailToDraftsInteractor {
return null;
}
}
Future<void> _deleteOldDraftsEmail({
required Session session,
required AccountId accountId,
required EmailId draftEmailId,
CancelToken? cancelToken
}) async {
try {
await _emailRepository.removeEmailDrafts(
session,
accountId,
draftEmailId,
cancelToken: cancelToken
);
} catch (e) {
logError('CreateNewAndSaveEmailToDraftsInteractor::_deleteOldDraftsEmail: Exception: $e');
}
}
}
+24 -33
View File
@@ -541,11 +541,14 @@ class EmailAPI with HandleSetErrorMixin {
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize);
return Future.sync(() async {
return setEmailResponse?.destroyed?.contains(emailId.id) == true;
}).catchError((error) {
throw error;
});
final isEmailDestroyed = setEmailResponse?.destroyed?.contains(emailId.id) ?? false;
final mapErrors = handleSetResponse([setEmailResponse]);
if (isEmailDestroyed && mapErrors.isEmpty) {
return isEmailDestroyed;
} else {
throw SetMethodException(mapErrors);
}
}
Future<Email> updateEmailDrafts(
@@ -555,37 +558,25 @@ class EmailAPI with HandleSetErrorMixin {
EmailId oldEmailId,
{CancelToken? cancelToken}
) async {
final idCreateMethod = Id(_uuid.v1());
final setEmailMethod = SetEmailMethod(accountId)
..addCreate(idCreateMethod, newEmail)
..addDestroy({oldEmailId.id});
final requestBuilder = JmapRequestBuilder(_httpClient, ProcessingInvocation());
final setEmailInvocation = requestBuilder.invocation(setEmailMethod);
final capabilities = setEmailMethod.requiredCapabilities
.toCapabilitiesSupportTeamMailboxes(session, accountId);
final response = await (requestBuilder
..usings(capabilities))
.build()
.execute(cancelToken: cancelToken);
final setEmailResponse = response.parse<SetEmailResponse>(
setEmailInvocation.methodCallId,
SetEmailResponse.deserialize
final emailCreated = await saveEmailAsDrafts(
session,
accountId,
newEmail,
cancelToken: cancelToken
);
final emailUpdated = setEmailResponse?.created?[idCreateMethod];
final isEmailDeleted = setEmailResponse?.destroyed?.contains(oldEmailId.id);
final mapErrors = handleSetResponse([setEmailResponse]);
if (emailUpdated != null && isEmailDeleted == true && mapErrors.isEmpty) {
return emailUpdated;
} else {
throw SetMethodException(mapErrors);
try {
await removeEmailDrafts(
session,
accountId,
oldEmailId,
cancelToken: cancelToken
);
} catch (e) {
logError('EmailAPI::updateEmailDrafts: Exception = $e');
}
return emailCreated;
}
Future<List<EmailId>> deleteMultipleEmailsPermanently(