From 089d2bd1cb6a16f867606c6115d9609e83f26a75 Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 9 Apr 2026 10:55:13 +0200 Subject: [PATCH] Add FinalizeDocumentController and refactor query model Refactored ReadSingleEnvelopeDocResultQuery to use a parameterless constructor and an Envelope property. Introduced FinalizeDocumentController with a GET endpoint to finalize and return envelope documents as PDFs, supporting force regeneration. Added dependency injection for IMediator and FinalizeDocumentJob. Includes a TODO to migrate forceRegenerate logic into the job. --- .../ReadSingleEnvelopeDocResultQuery.cs | 9 ++++-- .../Controllers/FinalizeDocumentController.cs | 29 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 EnvelopeGenerator.ServiceHost/Controllers/FinalizeDocumentController.cs diff --git a/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeDocResultQuery.cs b/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeDocResultQuery.cs index 73760944..f2bb0f0e 100644 --- a/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeDocResultQuery.cs +++ b/EnvelopeGenerator.Application/Envelopes/Queries/ReadSingleEnvelopeDocResultQuery.cs @@ -8,8 +8,13 @@ namespace EnvelopeGenerator.Application.Envelopes.Queries; /// /// Repräsentiert eine Abfrage für Umschläge. /// -/// -public record ReadSingleEnvelopeDocResultQuery(ReadSingleEnvelopeQuery Envelope) : EnvelopeQueryBase, IRequest; +public record ReadSingleEnvelopeDocResultQuery() : EnvelopeQueryBase, IRequest +{ + /// + /// + /// + public ReadSingleEnvelopeQuery Envelope { get; set; } = null!; +} /// /// Verarbeitet und liefert passende -Ergebnisse. diff --git a/EnvelopeGenerator.ServiceHost/Controllers/FinalizeDocumentController.cs b/EnvelopeGenerator.ServiceHost/Controllers/FinalizeDocumentController.cs new file mode 100644 index 00000000..d5056901 --- /dev/null +++ b/EnvelopeGenerator.ServiceHost/Controllers/FinalizeDocumentController.cs @@ -0,0 +1,29 @@ +using EnvelopeGenerator.Application.Envelopes.Queries; +using EnvelopeGenerator.ServiceHost.Jobs; +using MediatR; +using Microsoft.AspNetCore.Mvc; + +namespace EnvelopeGenerator.ServiceHost.Controllers; + +/// +/// +/// +/// +/// +[Route("api/[controller]")] +[ApiController] +public class FinalizeDocumentController(IMediator mediator, FinalizeDocumentJob job) : ControllerBase +{ + [HttpGet] + public async Task FinalizeEnvelopeDocument([FromQuery] ReadSingleEnvelopeQuery query, [FromQuery] bool forceRegenerate = false, CancellationToken cancel = default) + { + var envelope = await mediator.Send(query, cancel); + + // TODO: migrate forceRegenerate input to FinalizeDocumentJob as property and remove this check from controller + if (envelope.DocResult is null || forceRegenerate) + await job.ExecuteAsync(envelope, cancel); + + var docResult = await mediator.Send(new ReadSingleEnvelopeDocResultQuery() { Envelope = query }, cancel); + return File(docResult, "application/pdf", $"envelope_{query.Uuid}.pdf"); + } +} \ No newline at end of file