using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts; using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly; using EnvelopeGenerator.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; namespace EnvelopeGenerator.Web.Controllers { [Route("api/[controller]")] [ApiController] public class ReadOnlyController : ControllerBase { private readonly ILogger _logger; private readonly IEnvelopeReceiverReadOnlyService _erroService; public ReadOnlyController(ILogger logger, IEnvelopeReceiverReadOnlyService erroService) { _logger = logger; _erroService = erroService; } [HttpGet] [Authorize] public async Task GetAllAsync() { var res = await _erroService.ReadAllAsync(); return Ok(res); } [HttpPost] [Authorize] public async Task CreateAsync([FromBody] EnvelopeReceiverReadOnlyCreateDto createDto) { //set AddedWho var authReceiverMail = this.GetAuthReceiverMail(); if (authReceiverMail is null) { _logger.LogError("Email clam is not found in envelope-receiver-read-only creation process. Create DTO is:\n {dto}", JsonConvert.SerializeObject(createDto)); return Unauthorized(); } createDto.AddedWho = authReceiverMail; return await _erroService.CreateAsync(createDto: createDto).ThenAsync( Success: id => Ok(id), Fail: IActionResult (msg, ntc) => { return StatusCode(StatusCodes.Status500InternalServerError); }); } [HttpGet("key/{readOnlyId}")] public IActionResult CreateLink(long readOnlyId) => Ok( Request.Headers["Origin"].ToString() + "/EnvelopeKey/" + readOnlyId.EncodeEnvelopeReceiverId()); } }