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; using static System.Runtime.InteropServices.JavaScript.JSType; namespace EnvelopeGenerator.Web.Controllers { [Route("api/[controller]")] [ApiController] public class ReadOnlyController : ControllerBase { private readonly ILogger _logger; private readonly IEnvelopeReceiverReadOnlyService _erroService; private readonly IEnvelopeMailService _mailService; public ReadOnlyController(ILogger logger, IEnvelopeReceiverReadOnlyService erroService, IEnvelopeMailService mailService) { _logger = logger; _erroService = erroService; _mailService = mailService; } [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; // create entity var creation_res = await _erroService.CreateAsync(createDto: createDto); if (creation_res.IsFailed) { _logger.LogNotice(creation_res); return StatusCode(StatusCodes.Status500InternalServerError); } //read new entity var read_res = await _erroService.ReadByIdAsync(creation_res.Data); if (read_res.IsFailed) { _logger.LogNotice(creation_res); return StatusCode(StatusCodes.Status500InternalServerError); } var new_erro = read_res.Data; //send email two receiver return await _mailService.SendAsync(new_erro).ThenAsync(Success: res => Ok(), Fail: IActionResult (msg, ntc) => { _logger.LogNotice(ntc); return StatusCode(StatusCodes.Status500InternalServerError); }); } [HttpGet("key/{readOnlyId}")] public IActionResult CreateLink(long readOnlyId) => Ok( Request.Headers["Origin"].ToString() + "/EnvelopeKey/" + readOnlyId.EncodeEnvelopeReceiverId()); } }