refactor: rename ReadEmailQuery to ReadEmailViaImapQuery, rename PublishEmailCommand to PublishEmailViaSmtpCommand
This commit is contained in:
@@ -16,7 +16,7 @@ public class EmailMappingProfile : Profile
|
||||
{
|
||||
// PublishEmailCommand -> Email
|
||||
// Sender is resolved via MediatR in the handler and set separately after mapping.
|
||||
CreateMap<PublishEmailCommand, EmailContext>()
|
||||
CreateMap<PublishEmailViaSmtpCommand, EmailContext>()
|
||||
.ForMember(dest => dest.Sender, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.Attachments, opt => opt.MapFrom(src => src.Attachments));
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace DigitalData.MessagingService.Application.EmailReceiving.Queries;
|
||||
/// <summary>
|
||||
/// Query to fetch emails from an IMAP mailbox.
|
||||
/// </summary>
|
||||
public record ReadEmailQuery : IRequest<ReadEmailQueryResponse>
|
||||
public record ReadEmailViaImapQuery : IRequest<ReadEmailQueryResponse>
|
||||
{
|
||||
/// <summary>
|
||||
/// Identifies the email account to use.
|
||||
@@ -28,9 +28,9 @@ public record ReadEmailQuery : IRequest<ReadEmailQueryResponse>
|
||||
public MailSearchFilter Mail { get; init; } = new();
|
||||
}
|
||||
|
||||
public class ReadEmailQueryHandler(IMapper Mapper, ILogger<ReadEmailQueryHandler> Logger, IRepository<EmailAccount> EmailAccountRepo, IReceivedEmailRepository MailRepo, IImapEmailService imapEmailService) : IRequestHandler<ReadEmailQuery, ReadEmailQueryResponse>
|
||||
public class ReadEmailViaImapQueryHandler(IMapper Mapper, ILogger<ReadEmailViaImapQueryHandler> Logger, IRepository<EmailAccount> EmailAccountRepo, IReceivedEmailRepository MailRepo, IImapEmailService imapEmailService) : IRequestHandler<ReadEmailViaImapQuery, ReadEmailQueryResponse>
|
||||
{
|
||||
public async Task<ReadEmailQueryResponse> Handle(ReadEmailQuery request, CancellationToken cancellationToken)
|
||||
public async Task<ReadEmailQueryResponse> Handle(ReadEmailViaImapQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
var accounts = await EmailAccountRepo.FindAsync(request.Account.Id is int id ? x => x.Id == id : x => x.Username == request.Account.Username, cancellationToken: cancellationToken);
|
||||
|
||||
@@ -5,9 +5,9 @@ using FluentValidation;
|
||||
namespace DigitalData.MessagingService.Application.EmailReceiving.Validators;
|
||||
|
||||
/// <summary>
|
||||
/// Validates a <see cref="ReadEmailQuery"/> before it is handled by <see cref="ReadEmailQueryHandler"/>.
|
||||
/// Validates a <see cref="ReadEmailViaImapQuery"/> before it is handled by <see cref="ReadEmailViaImapQueryHandler"/>.
|
||||
/// </summary>
|
||||
public class FetchEmailsQueryValidator : AbstractValidator<ReadEmailQuery>
|
||||
public class FetchEmailsQueryValidator : AbstractValidator<ReadEmailViaImapQuery>
|
||||
{
|
||||
public FetchEmailsQueryValidator()
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace DigitalData.MessagingService.Application.EmailSending.Commands;
|
||||
/// <summary>
|
||||
/// Command to send an email (enqueue to RabbitMQ)
|
||||
/// </summary>
|
||||
public record PublishEmailCommand : IRequest<Guid>
|
||||
public record PublishEmailViaSmtpCommand : IRequest<Guid>
|
||||
{
|
||||
public required GetEmailAccountQuery Sender { get; init; }
|
||||
|
||||
@@ -46,7 +46,7 @@ public record PublishEmailCommand : IRequest<Guid>
|
||||
/// Returns a new command instance with the supplied attachments.
|
||||
/// Called by the controller after resolving uploaded files.
|
||||
/// </summary>
|
||||
public PublishEmailCommand WithAttachments(IEnumerable<EmailAttachmentDto> attachments)
|
||||
public PublishEmailViaSmtpCommand WithAttachments(IEnumerable<EmailAttachmentDto> attachments)
|
||||
=> this with { Attachments = attachments };
|
||||
}
|
||||
|
||||
@@ -54,9 +54,9 @@ public record PublishEmailCommand : IRequest<Guid>
|
||||
/// Handler for PublishEmailCommand
|
||||
/// Resolves the sender account via MediatR, maps to SendingEmailEvent and enqueues to RabbitMQ
|
||||
/// </summary>
|
||||
public class PublishEmailCommandHandler(IRepository<EmailAccount> Repo, ISendingEmailPublisher Publisher, IMapper Mapper, ILogger<PublishEmailCommandHandler> Logger) : IRequestHandler<PublishEmailCommand, Guid>
|
||||
public class PublishEmailViaSmtpCommandHandler(IRepository<EmailAccount> Repo, ISendingEmailPublisher Publisher, IMapper Mapper, ILogger<PublishEmailViaSmtpCommandHandler> Logger) : IRequestHandler<PublishEmailViaSmtpCommand, Guid>
|
||||
{
|
||||
public async Task<Guid> Handle(PublishEmailCommand request, CancellationToken cancellationToken)
|
||||
public async Task<Guid> Handle(PublishEmailViaSmtpCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
var senderAccounts = await Repo.FindAsync(request.Sender.Id is int id ? x => x.Id == id : x => x.Username == request.Sender.Username, cancellationToken: cancellationToken);
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace DigitalData.MessagingService.Application.EmailSending.Validators;
|
||||
/// <summary>
|
||||
/// Validator for PublishEmailCommand
|
||||
/// </summary>
|
||||
public class PublishEmailCommandValidator : AbstractValidator<PublishEmailCommand>
|
||||
public class PublishEmailCommandValidator : AbstractValidator<PublishEmailViaSmtpCommand>
|
||||
{
|
||||
public PublishEmailCommandValidator()
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ public class EmailController(IMediator mediator) : ControllerBase
|
||||
Uid,
|
||||
}
|
||||
|
||||
#region Send
|
||||
#region SMTP Send
|
||||
/// <summary>
|
||||
/// Send an email, optionally with file attachments.
|
||||
/// Omit the <c>attachments</c> field for a plain send.
|
||||
@@ -38,12 +38,12 @@ public class EmailController(IMediator mediator) : ControllerBase
|
||||
/// <param name="attachments">Optional uploaded files</param>
|
||||
/// <param name="cancellationToken">Cancellation token</param>
|
||||
/// <returns>HTTP 202 Accepted with the queued event ID</returns>
|
||||
[HttpPost]
|
||||
[HttpPost("smtp")]
|
||||
[Consumes("multipart/form-data")]
|
||||
[ProducesResponseType(StatusCodes.Status202Accepted)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
public async Task<IActionResult> SendEmail(
|
||||
[FromForm] PublishEmailCommand command,
|
||||
[FromForm] PublishEmailViaSmtpCommand command,
|
||||
IFormFileCollection? attachments,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -78,9 +78,9 @@ public class EmailController(IMediator mediator) : ControllerBase
|
||||
|
||||
return result;
|
||||
}
|
||||
#endregion Send
|
||||
#endregion SMTP Send
|
||||
|
||||
#region Receive
|
||||
#region IMAP Receive
|
||||
/// <summary>
|
||||
/// Fetch emails from an IMAP mailbox.
|
||||
/// </summary>
|
||||
@@ -92,7 +92,7 @@ public class EmailController(IMediator mediator) : ControllerBase
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public async Task<IActionResult> FetchEmails([FromQuery] ReadEmailQuery query, [FromQuery] OnlyFilter? only = null, CancellationToken cancellationToken = default)
|
||||
public async Task<IActionResult> FetchEmails([FromQuery] ReadEmailViaImapQuery query, [FromQuery] OnlyFilter? only = null, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var res = await mediator.Send(query, cancellationToken);
|
||||
|
||||
@@ -111,7 +111,7 @@ public class EmailController(IMediator mediator) : ControllerBase
|
||||
else
|
||||
return Ok(res);
|
||||
}
|
||||
#endregion Receive
|
||||
#endregion IMAP Receive
|
||||
|
||||
#region IMAP Send
|
||||
/// <summary>
|
||||
@@ -122,7 +122,7 @@ public class EmailController(IMediator mediator) : ControllerBase
|
||||
/// <param name="attachments">Optional uploaded files</param>
|
||||
/// <param name="cancellationToken">Cancellation token</param>
|
||||
/// <returns>HTTP 202 Accepted with the queued event ID</returns>
|
||||
[HttpPost("imap/send")]
|
||||
[HttpPost("imap")]
|
||||
[Consumes("multipart/form-data")]
|
||||
[ProducesResponseType(StatusCodes.Status202Accepted)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
@@ -185,7 +185,7 @@ public class EmailController(IMediator mediator) : ControllerBase
|
||||
/// <param name="attachments">Optional uploaded files</param>
|
||||
/// <param name="cancellationToken">Cancellation token</param>
|
||||
/// <returns>HTTP 202 Accepted with the queued event ID</returns>
|
||||
[HttpPost("oauth2/send")]
|
||||
[HttpPost("oauth2")]
|
||||
[Consumes("multipart/form-data")]
|
||||
[ProducesResponseType(StatusCodes.Status202Accepted)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
|
||||
Reference in New Issue
Block a user