using EnvelopeGenerator.Application.Contracts.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using static EnvelopeGenerator.Common.Constants; namespace EnvelopeGenerator.GeneratorAPI.Controllers { [Route("api/[controller]")] [ApiController] [Authorize] public class HistoryController : ControllerBase { private readonly ILogger _logger; private readonly IEnvelopeHistoryService _service; 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); } [HttpGet] [Authorize] public async Task GetAllAsync([FromQuery] int? envelopeId = null, [FromQuery] string? userReference = null, [FromQuery] int? referenceType = null, [FromQuery] bool withSender = false, [FromQuery] bool withReceiver = false) { ReferenceType? refTypEnum = null; if (referenceType is int refTypInt) if (Enum.IsDefined(typeof(ReferenceType), refTypInt)) refTypEnum = (ReferenceType)refTypInt; else throw new ArgumentException($"The provided referenceType '{referenceType}' is not valid. It must correspond to a valid value in the {nameof(ReferenceType)} enum."); switch(referenceType) { case (int)ReferenceType.Receiver: withReceiver = true; break; case (int)ReferenceType.Sender: withSender = true; break; } var histories = await _service.ReadAsync( envelopeId: envelopeId, userReference: userReference, referenceType: refTypEnum, withSender: withSender, withReceiver: withReceiver); return Ok(histories); } } }