#if WINDOWS
using MediatR;
using EnvelopeGenerator.Application.EnvelopeReports;
using EnvelopeGenerator.Application.Exceptions;
using EnvelopeGenerator.Domain.Entities;
using Microsoft.Extensions.Logging;
using EnvelopeGenerator.CommonServices;
namespace EnvelopeGenerator.Application.Pdf.Behaviors;
///
///
///
public class AddReportBehavior : IPipelineBehavior
{
private readonly ISender _sender;
private readonly ILogger _logger;
///
///
///
///
///
public AddReportBehavior(ISender sender, ILogger logger)
{
_sender = sender;
_logger = logger;
}
///
///
///
///
///
///
///
public async Task Handle(BurnPdfCommand request, RequestHandlerDelegate next, CancellationToken cancel)
{
var docResult = await next(cancel);
request.Report = 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;
}
private static byte[] DoCreateReport(IEnumerable oItems)
{
var oSource = new ReportSource { Items = oItems };
var oReport = new rptEnvelopeHistory
{
DataSource = oSource,
DataMember = "Items"
};
// Creating report in memory
oReport.CreateDocument();
// Exporting report to stream
using var oStream = new MemoryStream();
oReport.ExportToPdf(oStream);
// Writing report to buffer
return oStream.ToArray();
}
///
///
///
public class ReportSource
{
///
///
///
public required IEnumerable Items { get; init; }
}
}
#endif