From 4e7fe277233c64b45113318a7152f1f0ad8f6248 Mon Sep 17 00:00:00 2001 From: Yorick de Wid Date: Wed, 11 Sep 2024 16:38:34 +0200 Subject: [PATCH] Add PdfController for PDF generation --- .../Controllers/PdfController.cs | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/FunderMaps.WebApi/Controllers/PdfController.cs diff --git a/src/FunderMaps.WebApi/Controllers/PdfController.cs b/src/FunderMaps.WebApi/Controllers/PdfController.cs new file mode 100644 index 00000000..f8ad84b7 --- /dev/null +++ b/src/FunderMaps.WebApi/Controllers/PdfController.cs @@ -0,0 +1,51 @@ +using System.Text; +using System.Text.Json; +using FunderMaps.Core.Controllers; +using Microsoft.AspNetCore.Mvc; + +namespace FunderMaps.WebApi.Controllers; + +// TODO: This is a makeshift controller to demonstrate the PDF generation. +public class PdfController(IConfiguration configuration) : FunderMapsController +{ + [HttpGet("api/pdf/{id}")] + public async Task GetAsync(string id) + { + var httpClient = new HttpClient + { + Timeout = TimeSpan.FromMinutes(5), + DefaultRequestHeaders = + { + { "x-api-key", configuration.GetSection("PdfCo:ApiKey").Value} + } + }; + + try + { + string jsonBody = JsonSerializer.Serialize(new + { + url = $"https://whale-app-nm9uv.ondigitalocean.app/{id}", + name = $"{id}.pdf", + paperSize = "A4", + async = false, + }); + using var content = new StringContent(jsonBody, Encoding.UTF8, "application/json"); + + HttpResponseMessage response = await httpClient.PostAsync("https://api.pdf.co/v1/pdf/convert/from/url", content); + response.EnsureSuccessStatusCode(); // Throw an exception if the request failed + + var jsonResponse = await response.Content.ReadAsStringAsync(); + var url = JsonSerializer.Deserialize>(jsonResponse)["url"]; + + return Ok(url); + } + catch (HttpRequestException ex) + { + Console.WriteLine($"An error occurred: {ex.Message}"); + } + + httpClient.Dispose(); + + return Ok(); + } +}