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.
This commit is contained in:
2026-04-09 10:55:13 +02:00
parent 65c72bcf77
commit 089d2bd1cb
2 changed files with 36 additions and 2 deletions

View File

@@ -0,0 +1,29 @@
using EnvelopeGenerator.Application.Envelopes.Queries;
using EnvelopeGenerator.ServiceHost.Jobs;
using MediatR;
using Microsoft.AspNetCore.Mvc;
namespace EnvelopeGenerator.ServiceHost.Controllers;
/// <summary>
///
/// </summary>
/// <param name="mediator"></param>
/// <param name="job"></param>
[Route("api/[controller]")]
[ApiController]
public class FinalizeDocumentController(IMediator mediator, FinalizeDocumentJob job) : ControllerBase
{
[HttpGet]
public async Task<IActionResult> 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");
}
}