using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.Histories.Queries.Read; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using static EnvelopeGenerator.Common.Constants; namespace EnvelopeGenerator.GeneratorAPI.Controllers; /// /// Dieser Controller stellt Endpunkte für den Zugriff auf die Umschlaghistorie bereit. /// [Route("api/[controller]")] [ApiController] [Authorize] public class HistoryController : ControllerBase { private readonly ILogger _logger; private readonly IEnvelopeHistoryService _service; /// /// Konstruktor für den HistoryController. /// /// Der Logger, der für das Protokollieren von Informationen verwendet wird. /// Der Dienst, der für die Verarbeitung der Umschlaghistorie verantwortlich ist. public HistoryController(ILogger logger, IEnvelopeHistoryService service) { _logger = logger; _service = service; } /// /// An der Versendung eines Umschlags können mehrere Beteiligte beteiligt sein, darunter der Absender, der Empfänger und das System selbst. /// Der Prozess liefert alle relevanten Nenner, die mit der Schlüsselnummer verbunden sind, und ermöglicht es dem Kunden, /// die Aktualität und Richtigkeit der Informationen zu überprüfen. /// /// 0: Receiver /// 1: Sender /// 2: System /// 3: Unknown /// (Ein unbekannter Datensatz weist auf einen möglichen Mangel oder eine Unstimmigkeit im Aktualisierungsprozess der Anwendung hin.) /// /// /// /// [HttpGet("related")] [Authorize] public IActionResult GetReferenceTypes() { // Enum zu Schlüssel-Wert-Paar var referenceTypes = Enum.GetValues(typeof(ReferenceType)) .Cast() .ToDictionary(rt => { var key = rt.ToString(); var keyAsCamelCase = char.ToLower(key[0]) + key[1..]; return keyAsCamelCase; }, rt => (int)rt); return Ok(referenceTypes); } /// /// Ruft die gesamte Umschlaghistorie basierend auf den angegebenen Abfrageparametern ab. /// /// Die Abfrageparameter, die die Filterkriterien für die Umschlaghistorie definieren. /// Eine Liste von Historieneinträgen, die den angegebenen Kriterien entsprechen, oder nur der letzte Eintrag. /// Die Anfrage war erfolgreich, und die Umschlaghistorie wird zurückgegeben. /// Die Anfrage war ungültig oder unvollständig. /// Der Benutzer ist nicht authentifiziert. /// Der Benutzer hat keine Berechtigung, auf die Ressource zuzugreifen. /// Ein unerwarteter Fehler ist aufgetreten. [HttpGet] [Authorize] public async Task GetAllAsync([FromQuery] ReadHistoryQuery history) { bool withReceiver = false; bool withSender = false; switch (history.Related) { case ReferenceType.Receiver: withReceiver = true; break; case ReferenceType.Sender: withSender = true; break; } var histories = await _service.ReadAsync( envelopeId: history.EnvelopeId, referenceType: history.Related, withSender: withSender, withReceiver: withReceiver); return Ok(histories); } }