Replaced all EnvelopeGenerator.GeneratorAPI namespaces with EnvelopeGenerator.API across controllers, models, extensions, middleware, and annotation-related files. Updated using/import statements and namespace declarations accordingly. Added wwwroot folder to project file. Minor code adjustments made for consistency. This unifies API naming for improved clarity and maintainability.
110 lines
4.7 KiB
C#
110 lines
4.7 KiB
C#
using EnvelopeGenerator.Application.Envelopes.Commands;
|
|
using EnvelopeGenerator.Application.Envelopes.Queries;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace EnvelopeGenerator.API.Controllers;
|
|
|
|
/// <summary>
|
|
/// Dieser Controller stellt Endpunkte für die Verwaltung von Umschlägen bereit.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Die API ermöglicht das Abrufen und Verwalten von Umschlägen basierend auf Benutzerinformationen und Statusfiltern.
|
|
///
|
|
/// Mögliche Antworten:
|
|
/// - 200 OK: Die Anfrage war erfolgreich, und die angeforderten Daten werden zurückgegeben.
|
|
/// - 400 Bad Request: Die Anfrage war fehlerhaft oder unvollständig.
|
|
/// - 401 Unauthorized: Der Benutzer ist nicht authentifiziert.
|
|
/// - 403 Forbidden: Der Benutzer hat keine Berechtigung, auf die Ressource zuzugreifen.
|
|
/// - 404 Not Found: Die angeforderte Ressource wurde nicht gefunden.
|
|
/// - 500 Internal Server Error: Ein unerwarteter Fehler ist aufgetreten.
|
|
/// </remarks>
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
[Authorize]
|
|
public class EnvelopeController : ControllerBase
|
|
{
|
|
private readonly ILogger<EnvelopeController> _logger;
|
|
private readonly IMediator _mediator;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine neue Instanz des EnvelopeControllers.
|
|
/// </summary>
|
|
/// <param name="logger">Der Logger, der für das Protokollieren von Informationen verwendet wird.</param>
|
|
/// <param name="mediator"></param>
|
|
public EnvelopeController(ILogger<EnvelopeController> logger, IMediator mediator)
|
|
{
|
|
_logger = logger;
|
|
_mediator = mediator;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ruft eine Liste von Umschlägen basierend auf dem Benutzer und den angegebenen Statusfiltern ab.
|
|
/// </summary>
|
|
/// <param name="envelope"></param>
|
|
/// <returns>Eine IActionResult-Instanz, die die abgerufenen Umschläge oder einen Fehlerstatus enthält.</returns>
|
|
/// <response code="200">Die Anfrage war erfolgreich, und die Umschläge werden zurückgegeben.</response>
|
|
/// <response code="400">Die Anfrage war fehlerhaft oder unvollständig.</response>
|
|
/// <response code="401">Der Benutzer ist nicht authentifiziert.</response>
|
|
/// <response code="403">Der Benutzer hat keine Berechtigung, auf die Ressource zuzugreifen.</response>
|
|
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
|
|
[Authorize]
|
|
[HttpGet]
|
|
public async Task<IActionResult> GetAsync([FromQuery] ReadEnvelopeQuery envelope)
|
|
{
|
|
var result = await _mediator.Send(envelope.Authorize(User.GetId()));
|
|
return result.Any() ? Ok(result) : NotFound();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ruft das Ergebnis eines Dokuments basierend auf der ID ab.
|
|
/// </summary>
|
|
/// <param name="query"></param>
|
|
/// <param name="view">Gibt an, ob das Dokument inline angezeigt werden soll (true) oder als Download bereitgestellt wird (false).</param>
|
|
/// <returns>Eine IActionResult-Instanz, die das Dokument oder einen Fehlerstatus enthält.</returns>
|
|
/// <response code="200">Das Dokument wurde erfolgreich abgerufen.</response>
|
|
/// <response code="404">Das Dokument wurde nicht gefunden oder ist nicht verfügbar.</response>
|
|
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
|
|
[HttpGet("doc-result")]
|
|
public async Task<IActionResult> GetDocResultAsync([FromQuery] ReadEnvelopeQuery query, [FromQuery] bool view = false)
|
|
{
|
|
var envelopes = await _mediator.Send(query.Authorize(User.GetId()));
|
|
var envelope = envelopes.FirstOrDefault();
|
|
|
|
if (envelope is null)
|
|
return NotFound("Envelope not available.");
|
|
if (envelope.DocResult is null)
|
|
return NotFound("The document has not been fully signed or the result has not yet been released.");
|
|
|
|
if (view)
|
|
{
|
|
Response.Headers.Append("Content-Disposition", "inline; filename=\"" + envelope.Uuid + ".pdf\"");
|
|
return File(envelope.DocResult, "application/pdf");
|
|
}
|
|
|
|
return File(envelope.DocResult, "application/pdf", $"{envelope.Uuid}.pdf");
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="command"></param>
|
|
/// <returns></returns>
|
|
[NonAction]
|
|
[Authorize]
|
|
[HttpPost]
|
|
public async Task<IActionResult> CreateAsync([FromBody] CreateEnvelopeCommand command)
|
|
{
|
|
var res = await _mediator.Send(command.Authorize(User.GetId()));
|
|
|
|
if (res is null)
|
|
{
|
|
_logger.LogError("Failed to create envelope. Envelope details: {EnvelopeDetails}", JsonConvert.SerializeObject(command));
|
|
return StatusCode(StatusCodes.Status500InternalServerError);
|
|
}
|
|
else
|
|
return Ok(res);
|
|
}
|
|
} |