using DigitalData.Core.API; using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts.Services; using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Domain.Entities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.GeneratorAPI.Controllers { [Route("api/[controller]")] [ApiController] [Authorize] public class ReceiverController : CRUDControllerBaseWithErrorHandling { public ReceiverController(ILogger logger, IReceiverService service) : base(logger, service) { } [HttpGet] public async Task Get([FromQuery] string? emailAddress = null, [FromQuery] string? signature = null) { if (emailAddress is null && signature is null) return await base.GetAll(); try { return await _service.ReadByAsync(emailAddress: emailAddress, signature: signature).ThenAsync( Success: Ok, Fail: IActionResult (msg, ntc) => { _logger.LogNotice(ntc); return StatusCode(StatusCodes.Status500InternalServerError); }); } catch(Exception ex) { _logger.LogError(ex, "{Message}", ex.Message); return StatusCode(StatusCodes.Status500InternalServerError); } } [HttpPost] public async override Task Create(ReceiverCreateDto createDto) { if (!ModelState.IsValid) return BadRequest(ModelState); return await base.Create(createDto); } [HttpDelete] public async Task Delete([FromQuery] int? id = null, [FromQuery]string? emailAddress = null, [FromQuery] string? signature = null) { if(id is int id_int) return await base.Delete(id_int); try { if (emailAddress is not null || signature is not null) return await _service.DeleteByAsync(emailAddress: emailAddress, signature: signature).ThenAsync( Success: Ok, Fail: IActionResult (msg, ntc) => { _logger.LogNotice(ntc); return StatusCode(StatusCodes.Status500InternalServerError); }); } catch(Exception ex) { _logger.LogError(ex, "{Message}", ex.Message); return StatusCode(500); } return BadRequest(); } #region REMOVED ENDPOINTS [NonAction] public override Task GetAll() => base.GetAll(); [NonAction] public override Task Delete([FromRoute] int id) => base.Delete(id); [NonAction] public override Task Update(ReceiverUpdateDto updateDto) => base.Update(updateDto); #endregion } }