Files
pdf-service/PdfService/Program.cs
2025-12-31 17:38:34 +03:30

59 lines
1.6 KiB
C#

using System.Data;
using dotenv.net;
using Microsoft.AspNetCore.WebUtilities;
using Newtonsoft.Json;
using PdfService;
DotEnv.Load();
SentrySdk.Init(options =>
{
options.Dsn = Environment.GetEnvironmentVariable("SENTRY_DSN");
});
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseMiddleware<ExceptionHandlerMiddleware>();
app.MapPost("/Print", async (HttpContext context) =>
{
var request = context.Request;
var boundary = request.ContentType.Split("boundary=")[1];
var reader = new MultipartReader(boundary, request.Body);
MultipartSection section;
var parts = new List<(string ContentType, string Content, string ConentDisposition)>();
while ((section = await reader.ReadNextSectionAsync()) != null)
{
using var sr = new StreamReader(section.Body);
var content = await sr.ReadToEndAsync();
var contentType = section.ContentType;
var contentDisposition = section.ContentDisposition;
parts.Add((contentType, content, contentDisposition));
}
string reportTemplate = "";
string fileName = "";
dynamic data = null;
foreach (var part in parts)
{
if (part.ContentType == "application/json")
{
data = JsonConvert.DeserializeObject<DataTable>(part.Content);
}
else if (part.ContentType == "application/xml")
{
reportTemplate = part.Content;
fileName = part.ConentDisposition?.Split(".")[1];
}
}
var reportStream = Reporter.Print(reportTemplate, data);
return Results.File(reportStream, "application/pdf", $"{fileName}.pdf");
});
app.Run();