using EnvelopeGenerator.Application.Common.Extensions; using EnvelopeGenerator.Application.Histories.Commands; using EnvelopeGenerator.Application.Signatures.Commands; using EnvelopeGenerator.Domain.Constants; using MediatR; namespace EnvelopeGenerator.Application.Signatures.Behaviors; /// /// Pipeline behavior that records history. /// Executes third in the signing process. /// public class HistoryBehavior : IPipelineBehavior { private readonly ISender _sender; /// /// /// /// public HistoryBehavior(ISender sender) { _sender = sender; } /// /// /// /// /// /// /// public async Task Handle(SignCommand request, RequestHandlerDelegate next, CancellationToken cancellationToken) { if (request.EnvelopeReceiver.Receiver is null) throw new InvalidOperationException($"Receiver information is missing in the notification. SignCommand:\n {request.ToJson(Format.Json.ForDiagnostics)}"); await _sender.Send(new CreateHistoryCommand() { EnvelopeId = request.EnvelopeReceiver.EnvelopeId, UserReference = request.EnvelopeReceiver.Receiver.EmailAddress, Status = EnvelopeStatus.DocumentSigned, }, cancellationToken); return await next(cancellationToken); } }