refactor(api): Update EmailsController and EmailSenderWorker for simplified email sending
This commit is contained in:
@@ -23,15 +23,14 @@ public class EmailsController(IMediator mediator) : ControllerBase
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
public async Task<IActionResult> 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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
/// </summary>
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user