From 658040bd9695c2144d74399a6dd97bd31668caee Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 23 Jul 2026 11:20:09 +0200 Subject: [PATCH] refactor(api): Update EmailsController and EmailSenderWorker for simplified email sending --- .../Controllers/EmailsController.cs | 11 +++++------ .../Workers/EmailSenderWorker.cs | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/DigitalData.EmailProfiler.API/Controllers/EmailsController.cs b/src/DigitalData.EmailProfiler.API/Controllers/EmailsController.cs index 211f2ca..6cd0d09 100644 --- a/src/DigitalData.EmailProfiler.API/Controllers/EmailsController.cs +++ b/src/DigitalData.EmailProfiler.API/Controllers/EmailsController.cs @@ -23,15 +23,14 @@ public class EmailsController(IMediator mediator) : ControllerBase [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task SendEmail([FromBody] SendEmailCommand command, CancellationToken cancellationToken) { - var emailOutboxId = await mediator.Send(command, cancellationToken); + var outgoingEmailEvent = await mediator.Send(command, cancellationToken); return Accepted(new { - Message = "Email queued for sending", - EmailOutboxId = emailOutboxId, - To = command.Recipient, - command.Subject, - QueuedAt = DateTime.Now + CommandId = outgoingEmailEvent.Id, + To = outgoingEmailEvent.Recipient, + outgoingEmailEvent.Subject, + outgoingEmailEvent.QueuedAt }); } } diff --git a/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs b/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs index 058e40f..cc7dc27 100644 --- a/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs +++ b/src/DigitalData.EmailProfiler.API/Workers/EmailSenderWorker.cs @@ -1,5 +1,6 @@ +using DigitalData.EmailProfiler.Application.Common.Events; using DigitalData.EmailProfiler.Application.Common.Interfaces; -using DigitalData.EmailProfiler.Domain.Entities; +using DigitalData.EmailProfiler.Application.EmailSending.Commands; namespace DigitalData.EmailProfiler.API.Workers; @@ -53,27 +54,27 @@ public class EmailSenderWorker( /// Process single email message (callback from RabbitMQ consumer) /// NO database operations - only send email and log result /// - private async Task ProcessEmailAsync(EmailOutbox emailOutbox) + private async Task ProcessEmailAsync(OutgoingEmailEvent outgoingEmailEvent) { try { Logger.LogInformation("Processing outgoing email: To={To}, Subject={Subject}", - emailOutbox.Recipient, emailOutbox.Subject); + outgoingEmailEvent.Recipient, outgoingEmailEvent.Subject); // Send email via SMTP (SMTP config is injected in IEmailService via IOptions) await EmailService.SendEmailAsync( - emailOutbox.Recipient, - emailOutbox.Subject, - emailOutbox.Body, - isHtml: emailOutbox.IsHtml); + outgoingEmailEvent.Recipient, + outgoingEmailEvent.Subject, + outgoingEmailEvent.Body, + isHtml: outgoingEmailEvent.IsHtml); Logger.LogInformation("Email sent successfully: To={To}, Subject={Subject}", - emailOutbox.Recipient, emailOutbox.Subject); + outgoingEmailEvent.Recipient, outgoingEmailEvent.Subject); } catch (Exception ex) { Logger.LogError(ex, "Failed to send email: To={To}, Subject={Subject}. Moving to DLQ.", - emailOutbox.Recipient, emailOutbox.Subject); + outgoingEmailEvent.Recipient, outgoingEmailEvent.Subject); // Re-throw to trigger NACK in RabbitMQ consumer (requeue=false → DLQ) throw;