chore: change the draft flow

This commit is contained in:
mahyargdz
2025-08-04 12:49:01 +03:30
parent c21037a683
commit 07a8e75d3e
2 changed files with 25 additions and 15 deletions
+25 -5
View File
@@ -480,6 +480,15 @@ export class EmailService {
const draftsMailboxId = await this.mailboxResolverService.getDraftsMailboxId(wildduckUserId);
const existingDraft = await firstValueFrom(this.mailServerService.messages.getMessage(wildduckUserId, draftsMailboxId, messageId));
// Delete the existing draft first to avoid incrementing the count
try {
await firstValueFrom(this.mailServerService.messages.deleteMessage(wildduckUserId, draftsMailboxId, messageId));
this.logger.log(`Existing draft message ${messageId} deleted before update`);
} catch (error) {
this.logger.warn(`Failed to delete existing draft message ${messageId}: ${error instanceof Error ? error.message : String(error)}`);
// Continue with update even if deletion fails
}
const draftData: SendEmailDto = {
from: updateDraftDto.from || { address: existingDraft.from?.address || "" },
to: updateDraftDto.to || [],
@@ -496,10 +505,8 @@ export class EmailService {
ip: updateDraftDto.ip,
isDraft: true,
uploadOnly: true,
draft: {
mailbox: draftsMailboxId,
id: messageId,
},
// Remove the draft reference since we deleted the original
// This will create a new draft instead of trying to update the deleted one
};
const user = await this.userRepository.findOne({ wildduckUserId, deletedAt: null }, { populate: ["business"] });
@@ -539,11 +546,24 @@ export class EmailService {
//==============================================
async sendDraft(wildduckUserId: string, userId: string, messageId: number) {
const draftsMailboxId = await this.mailboxResolverService.getDraftsMailboxId(wildduckUserId);
// Get message details before sending (for notification)
const message = await firstValueFrom(this.mailServerService.messages.getMessage(wildduckUserId, draftsMailboxId, messageId));
// Submit the draft for delivery
const result = await firstValueFrom(
this.mailServerService.messages.submitDraft(wildduckUserId, draftsMailboxId, messageId, { deleteFiles: false }),
);
const message = await firstValueFrom(this.mailServerService.messages.getMessage(wildduckUserId, draftsMailboxId, messageId));
// Delete the draft from drafts folder after successful submission
// This ensures the draft count decreases properly
try {
await firstValueFrom(this.mailServerService.messages.deleteMessage(wildduckUserId, draftsMailboxId, messageId));
this.logger.log(`Draft message ${messageId} deleted from drafts folder after sending`);
} catch (error) {
this.logger.warn(`Failed to delete draft message ${messageId} from drafts folder: ${error instanceof Error ? error.message : String(error)}`);
// Don't fail the entire operation if deletion fails
}
await this.emailNotificationService.notifyEmailSentFromDraft({
wildduckUserId,