using DigitalData.EmailProfiler.Application.Interfaces.Repositories; using DigitalData.EmailProfiler.Domain.Exceptions; using MediatR; namespace DigitalData.EmailProfiler.Application.Features.EmailProfiles.Commands; /// /// Command to update an existing email profile. /// public record UpdateEmailProfileCommand : IRequest { public int Id { get; init; } public string ProfileName { get; init; } = string.Empty; public string? ValidationSql { get; init; } public int PollIntervalMinutes { get; init; } public bool IsActive { get; init; } } public class UpdateEmailProfileCommandHandler(IUnitOfWork unitOfWork) : IRequestHandler { public async Task Handle(UpdateEmailProfileCommand request, CancellationToken cancellationToken) { var profile = await unitOfWork.EmailProfiles.GetByIdAsync(request.Id, cancellationToken) ?? throw new DomainException($"Email profile with ID {request.Id} not found"); profile.ProfileName = request.ProfileName; profile.ValidationSql = request.ValidationSql; profile.PollIntervalMinutes = request.PollIntervalMinutes; profile.IsActive = request.IsActive; profile.ChangedWhen = DateTime.Now; profile.ChangedWho = "System"; // TODO: Get from current user context await unitOfWork.EmailProfiles.UpdateAsync(profile, cancellationToken); await unitOfWork.SaveChangesAsync(cancellationToken); return Unit.Value; } }