using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.EnvelopeHistories; 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. /// [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. /// /// Die Statusfilter, die für die Abfrage verwendet werden sollen. /// Eine IActionResult-Instanz, die die abgerufenen Umschläge oder einen Fehlerstatus enthält. [Authorize] [HttpGet] public async Task GetAsync( [FromQuery] StatusQuery status) { try { if (User.GetId() is int intId) return await _envelopeService.ReadByUserAsync(intId, min_status: status.Min, max_status: status.Max, ignore_statuses: status.Ignore).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); } } }