diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs
index ff1e7af1..13faf709 100644
--- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs
+++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs
@@ -96,6 +96,59 @@ public class EnvelopeController : ControllerBase
}
}
+ ///
+ /// Ruft das Ergebnis eines Dokuments basierend auf der ID ab.
+ ///
+ /// Die eindeutige ID des Umschlags.
+ /// Gibt an, ob das Dokument inline angezeigt werden soll (true) oder als Download bereitgestellt wird (false).
+ /// Eine IActionResult-Instanz, die das Dokument oder einen Fehlerstatus enthält.
+ /// Das Dokument wurde erfolgreich abgerufen.
+ /// Das Dokument wurde nicht gefunden oder ist nicht verfügbar.
+ /// Ein unerwarteter Fehler ist aufgetreten.
+ [HttpGet("doc-result")]
+ public async Task GetDocResultAsync([FromQuery] int id, [FromQuery] bool view = false)
+ {
+ try
+ {
+ if (User.GetId() is int intId)
+ return await _envelopeService.ReadByUserAsync(intId).ThenAsync(
+ Success: envelopes =>
+ {
+ var envelope = envelopes.Where(e => e.Id == id).FirstOrDefault();
+
+ if (envelope is null)
+ return NotFound("Envelope not available.");
+ else if (envelope?.DocResult is null)
+ return NotFound("The document has not been fully signed or the result has not yet been released.");
+ else
+ {
+ if (view)
+ {
+ Response.Headers.Append("Content-Disposition", "inline; filename=\"" + envelope.Uuid + ".pdf\"");
+ return File(envelope.DocResult, "application/pdf");
+ }
+ else
+ return File(envelope.DocResult, "application/pdf", $"{envelope.Uuid}.pdf");
+ }
+ },
+ Fail: IActionResult (msg, ntc) =>
+ {
+ _logger.LogNotice(ntc);
+ return StatusCode(StatusCodes.Status500InternalServerError);
+ });
+ else
+ {
+ _logger.LogError("Trotz erfolgreicher Autorisierung wurde die Benutzer-ID nicht als Ganzzahl erkannt. Dies könnte auf eine fehlerhafte Erstellung der Anspruchsliste zurückzuführen sein.");
+ return StatusCode(StatusCodes.Status500InternalServerError);
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "{Message}", ex.Message);
+ return StatusCode(StatusCodes.Status500InternalServerError);
+ }
+ }
+
///
///
///