#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