using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Application.Common.Extensions; using EnvelopeGenerator.Domain.Constants; using MediatR; namespace EnvelopeGenerator.Application.Common.Notifications.RemoveSignature.Handlers; /// /// /// public class RemoveHistoryHandler : INotificationHandler { private readonly IRepository _repo; /// /// /// /// public RemoveHistoryHandler(IRepository repository) { _repo = repository; } /// /// /// /// /// /// public Task Handle(RemoveSignatureNotification notification, CancellationToken cancel) { notification.ThrowIfHasNoFilter(); return _repo.DeleteAsync(hists => { hists = hists.Where(hist => hist.Status == EnvelopeStatus.DocumentSigned); // envelope ID filter if (notification.EnvelopeId is int envelopeId) hists = hists.Where(hist => hist.EnvelopeId == envelopeId); // envelope UUID filter if (notification.EnvelopeUuid is string envelopeUuid) hists = hists.Where(hist => hist.Envelope!.Uuid == envelopeUuid); // receiver ID filter if (notification.ReceiverId is int receiverId) hists = hists.Where(hist => hist.Receiver!.Id == receiverId); // receiver signature filter if (notification.ReceiverSignature is string receiverSignature) hists = hists.Where(hist => hist.Receiver!.Signature == receiverSignature); return hists; }, cancel); } }