From 306956a7be991048fd4b01140f049716fc876ae4 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Wed, 21 Aug 2024 16:37:54 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20L=C3=B6schen=20nach=20E-Mail=20oder=20S?= =?UTF-8?q?ignatur=20zur=20Delete-Methode=20und=20zum=20Service=20hinzugef?= =?UTF-8?q?=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Die `Delete`-Methode im Controller aktualisiert, um das Löschen nach `id`, `emailAddress` oder `signature` zu unterstützen. - `DeleteByAsync`-Methode im Service hinzugefügt, um Datensätze basierend auf `emailAddress` und `signature` zu löschen. - Fehlerbehandlung mit Protokollierung für fehlgeschlagene Löschversuche verbessert. --- .../Contracts/IReceiverService.cs | 2 ++ .../Services/ReceiverService.cs | 10 +++++++ .../Controllers/ReceiverController.cs | 26 +++++++++++++++++++ 3 files changed, 38 insertions(+) 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