using EnvelopeGenerator.Application.Contracts; 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] public async Task GetAllAsync([FromQuery] int? envelopeId = null, [FromQuery] string? userReference = null, [FromQuery] int? referenceType = null, [FromQuery] int? status = 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."); var histories = await _service.ReadAsync( envelopeId: envelopeId, userReference: userReference, referenceType: refTypEnum, status: status, withSender: withSender, withReceiver: withReceiver); return Ok(histories); } } }