using MediatR;
using EnvelopeGenerator.Application.Histories.Commands;
using EnvelopeGenerator.Domain.Constants;
using EnvelopeGenerator.Application.EnvelopeReports;
using EnvelopeGenerator.Application.Exceptions;
using EnvelopeGenerator.Domain.Entities;
namespace EnvelopeGenerator.Application.Pdf.Behaviors;
///
///
///
public class AddReportBehavior : IPipelineBehavior
{
private readonly ISender _sender;
///
///
///
///
public AddReportBehavior(ISender sender)
{
_sender = sender;
}
///
///
///
///
///
///
///
public async Task Handle(BurnPdfCommand request, RequestHandlerDelegate next, CancellationToken cancel)
{
var docResult = await next(cancel);
var base64 = Convert.ToBase64String(docResult);
if (!request.Debug)
await _sender.Send(new CreateHistoryCommand()
{
EnvelopeId = request.EnvelopeId,
UserReference = "System",
Status = EnvelopeStatus.EnvelopeReportCreated,
}, cancel);
docResult = await CreateReport(request.Envelope!, cancel);
return docResult;
}
///
///
///
///
///
///
///
public async Task CreateReport(Envelope envelope, CancellationToken cancel)
{
var oItems = await _sender.ReadEnvelopeReportAsync(envelope.Id, cancel: cancel);
if (!oItems.Any())
{
throw new CreateReportException("No report data found!");
}
var oBuffer = DoCreateReport(oItems);
return oBuffer;
}
}