using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.EnvelopeHistories.Queries.Read; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using static EnvelopeGenerator.Common.Constants; namespace EnvelopeGenerator.GeneratorAPI.Controllers; /// /// Dieser Controller bietet Endpunkte für den Zugriff auf die Verlaufshistorie von Umschlägen. /// [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 Verlaufshistorie verantwortlich ist. public HistoryController(ILogger logger, IEnvelopeHistoryService service) { _logger = logger; _service = service; } [HttpGet("reference-type")] [Authorize] public IActionResult GetReferenceTypes() { // Enum to Key-Value pair 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 Verlaufshistorie von Umschlägen basierend auf den angegebenen Abfrageparametern ab. /// /// Die Abfrageparameter, die die Filterkriterien für die Verlaufshistorie definieren. /// Eine Liste von Verlaufseinträgen, die den angegebenen Kriterien entsprechen. [HttpGet] [Authorize] public async Task GetAllAsync([FromQuery] ReadEnvelopeHistoryQuery history) { ReferenceType? refTypEnum = history.ReferenceType; bool withReceiver = false; bool withSender = false; switch (refTypEnum) { case ReferenceType.Receiver: withReceiver = true; break; case ReferenceType.Sender: withSender = true; break; } var histories = await _service.ReadAsync( envelopeId: history.EnvelopeId, //userReference: history.r, referenceType: refTypEnum, withSender: withSender, withReceiver: withReceiver); return Ok(histories); } }