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); + } + } + /// /// ///