diff --git a/EnvelopeGenerator.Application/Contracts/IReceiverService.cs b/EnvelopeGenerator.Application/Contracts/IReceiverService.cs index 7721d2ab..3c08f17b 100644 --- a/EnvelopeGenerator.Application/Contracts/IReceiverService.cs +++ b/EnvelopeGenerator.Application/Contracts/IReceiverService.cs @@ -8,5 +8,7 @@ namespace EnvelopeGenerator.Application.Contracts public interface IReceiverService : ICRUDService { public Task> ReadByAsync(string? emailAddress = null, string? signature = null); + + public Task DeleteByAsync(string? emailAddress = null, string? signature = null); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Services/ReceiverService.cs b/EnvelopeGenerator.Application/Services/ReceiverService.cs index 352a8240..edbe3d62 100644 --- a/EnvelopeGenerator.Application/Services/ReceiverService.cs +++ b/EnvelopeGenerator.Application/Services/ReceiverService.cs @@ -26,5 +26,15 @@ namespace EnvelopeGenerator.Application.Services return Result.Success(_mapper.MapOrThrow(rcv)); } + + public async Task DeleteByAsync(string? emailAddress = null, string? signature = null) + { + var rcv = await _repository.ReadByAsync(emailAddress: emailAddress, signature: signature); + + if (rcv is null) + return Result.Fail(); + + return await _repository.DeleteAsync(rcv) ? Result.Success() : Result.Fail(); + } } } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs index 935acdf1..cea340e8 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs @@ -3,12 +3,14 @@ using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts; 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) @@ -44,5 +46,29 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers return await base.Create(createDto); } + + [NonAction] + public override Task Delete([FromRoute] int id) + { + return base.Delete(id); + } + + [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); + + 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); + }); + + return BadRequest(); + } } } \ No newline at end of file