using DigitalData.Core.Exceptions; using EnvelopeGenerator.Application.EnvelopeReceivers.Queries; using EnvelopeGenerator.Domain.Constants; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; namespace EnvelopeGenerator.Web.Controllers; [Authorize(Roles = ReceiverRole.FullyAuth)] [ApiController] [Route("api/[controller]")] public class DocumentController : ControllerBase { private readonly IMediator _mediator; private readonly ILogger _logger; public DocumentController(IMediator mediator, ILogger logger) { _mediator = mediator; _logger = logger; } [HttpGet("{envelopeKey}")] public async Task GetDocument([FromRoute] string envelopeKey, CancellationToken cancel) { var envRcv = await _mediator.ReadEnvelopeReceiverAsync(envelopeKey, cancel) ?? throw new NotFoundException("Envelope Receiver is not found."); var byteData = envRcv.Envelope?.Documents?.FirstOrDefault()?.ByteData; if(byteData is null || byteData.Length == 0) { _logger.LogError("Document byte data is null or empty for envelope-receiver entity:\n{envelopeKey}.", JsonConvert.SerializeObject(envRcv, Format.Json.ForDiagnostics)); throw new NotFoundException("Document is empty."); } return File(byteData, "application/octet-stream"); } }