using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.Envelopes.Queries.Read; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.GeneratorAPI.Controllers; /// /// Dieser Controller stellt Endpunkte für die Verwaltung von Umschlägen bereit. /// /// /// 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. /// [Route("api/[controller]")] [ApiController] [Authorize] public class EnvelopeController : ControllerBase { private readonly ILogger _logger; private readonly IEnvelopeService _envelopeService; /// /// Erstellt eine neue Instanz des EnvelopeControllers. /// /// Der Logger, der für das Protokollieren von Informationen verwendet wird. /// Der Dienst, der für die Verarbeitung von Umschlägen zuständig ist. public EnvelopeController(ILogger logger, IEnvelopeService envelopeService) { _logger = logger; _envelopeService = envelopeService; } /// /// Ruft eine Liste von Umschlägen basierend auf dem Benutzer und den angegebenen Statusfiltern ab. /// /// /// Eine IActionResult-Instanz, die die abgerufenen Umschläge oder einen Fehlerstatus enthält. /// Die Anfrage war erfolgreich, und die Umschläge werden zurückgegeben. /// Die Anfrage war fehlerhaft oder unvollständig. /// Der Benutzer ist nicht authentifiziert. /// Der Benutzer hat keine Berechtigung, auf die Ressource zuzugreifen. /// Ein unerwarteter Fehler ist aufgetreten. [Authorize] [HttpGet] public async Task GetAsync([FromQuery] ReadEnvelopeQuery envelope) { try { if (User.GetId() is int intId) return await _envelopeService.ReadByUserAsync(intId, min_status: envelope.Status, max_status: envelope.Status).ThenAsync( Success: Ok, 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); } } }