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);
}
}