- Rename GetSenderQuery to GetEmailAccountQuery with updated return type (IEnumerable<EmailAccountDto>) - Handler now queries IRepository<EmailAccount> directly instead of chaining MediatR dispatches - Add EmailAccountModificationCommand for create/update/delete operations on email accounts - Update GetSenderQueryValidator to reference renamed query type - Remove exclusive Id/Username validation rule (now handled by repo query logic)
36 lines
1.4 KiB
C#
36 lines
1.4 KiB
C#
#if NET
|
|
using DigitalData.MessagingService.Application.Common.Dto.EmailAccounts;
|
|
using DigitalData.MessagingService.Application.Common.Interfaces.Repositories;
|
|
using DigitalData.MessagingService.Application.Common.ValueObjects;
|
|
using DigitalData.MessagingService.Domain.Entities;
|
|
using MediatR;
|
|
using System.Security.Principal;
|
|
|
|
namespace DigitalData.MessagingService.Application.EmailAccounts.Commands;
|
|
|
|
/// <summary>
|
|
/// DTO for a single email account configuration.
|
|
/// </summary>
|
|
public record EmailAccountModificationCommand : IRequest<(EmailAccount, bool)>
|
|
{
|
|
public required EmailAccountModificationDto ModifiedAccount { get; init; }
|
|
|
|
public required Modification Modification { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="Repo"></param>
|
|
public class EmailAccountModificationCommandHandler(IRepository<EmailAccount> Repo) : IRequestHandler<EmailAccountModificationCommand, (EmailAccount, bool)>
|
|
{
|
|
public async Task<(EmailAccount, bool)> Handle(EmailAccountModificationCommand request, CancellationToken cancellationToken)
|
|
{
|
|
return request.Modification switch
|
|
{
|
|
Modification.Upsert => await Repo.UpsertAsync(a => a.Username == request.ModifiedAccount.Username, request.ModifiedAccount, cancellationToken),
|
|
_ => throw new NotSupportedException($"Modification type '{request.Modification}' is not supported in email account modification."),
|
|
};
|
|
}
|
|
}
|
|
#endif |