From a3afeb175f5dfa75338813db2722a301e1128625 Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 28 Jan 2026 14:14:04 +0100 Subject: [PATCH] Refactor controllers for MediatR and cleaner API design - Switch EnvelopeController and ReceiverController to MediatR for all operations - Encapsulate UserId in CreateEnvelopeCommand via Authorize() method - Change CreateEnvelopeCommand binding to [FromBody] - Add CancellationToken support to EnvelopeReceiverController - Remove obsolete CRUD logic from ReceiverController; now only supports GET via MediatR - Clean up unused dependencies and update controller summaries for clarity --- .../Commands/CreateEnvelopeCommand.cs | 13 ++- .../Controllers/EnvelopeController.cs | 9 +- .../Controllers/EnvelopeReceiverController.cs | 8 +- .../Controllers/ReceiverController.cs | 84 ++++--------------- 4 files changed, 35 insertions(+), 79 deletions(-) diff --git a/EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeCommand.cs b/EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeCommand.cs index fb15ac8e..2c1367cb 100644 --- a/EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeCommand.cs +++ b/EnvelopeGenerator.Application/Envelopes/Commands/CreateEnvelopeCommand.cs @@ -33,7 +33,18 @@ public record CreateEnvelopeCommand : IRequest /// /// ID des Absenders /// - public int UserId { get; set; } + internal int UserId { get; private set; } + + /// + /// + /// + /// + /// + public bool Authorize(int userId) + { + UserId = userId; + return true; + } /// /// Determines which component is used for envelope processing. diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs index da74235b..c09ebd3f 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs @@ -90,19 +90,18 @@ public class EnvelopeController : ControllerBase /// /// /// - /// + /// /// [NonAction] [Authorize] [HttpPost] - public async Task CreateAsync([FromQuery] CreateEnvelopeCommand envelope) + public async Task CreateAsync([FromBody] CreateEnvelopeCommand command) { - envelope.UserId = User.GetId(); - var res = await _mediator.Send(envelope); + var res = await _mediator.Send(command.Authorize(User.GetId())); if (res is null) { - _logger.LogError("Failed to create envelope. Envelope details: {EnvelopeDetails}", JsonConvert.SerializeObject(envelope)); + _logger.LogError("Failed to create envelope. Envelope details: {EnvelopeDetails}", JsonConvert.SerializeObject(command)); return StatusCode(StatusCodes.Status500InternalServerError); } else diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs index 05fcfec3..513dac54 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs @@ -105,6 +105,7 @@ public class EnvelopeReceiverController : ControllerBase /// Datenübertragungsobjekt mit Informationen zu Umschlägen, Empfängern und Unterschriften. /// /// + /// /// HTTP-Antwort /// /// Sample request: @@ -140,13 +141,10 @@ public class EnvelopeReceiverController : ControllerBase /// Es handelt sich um einen unerwarteten Fehler. Die Protokolle sollten überprüft werden. [Authorize] [HttpPost] - public async Task CreateAsync([FromBody] CreateEnvelopeReceiverCommand request) + public async Task CreateAsync([FromBody] CreateEnvelopeReceiverCommand request, CancellationToken cancel) { - CancellationToken cancel = default; - int userId = User.GetId(); - #region Create Envelope - var envelope = await _envelopeExecutor.CreateEnvelopeAsync(userId, request.Title, request.Message, request.TFAEnabled, cancel); + var envelope = await _envelopeExecutor.CreateEnvelopeAsync(User.GetId(), request.Title, request.Message, request.TFAEnabled, cancel); #endregion #region Add receivers diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs index d89c59b3..756b5eb3 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs @@ -1,12 +1,7 @@ -using DigitalData.Core.Abstraction.Application.DTO; -using DigitalData.Core.API; +using MediatR; using EnvelopeGenerator.Application.Receivers.Queries; -using EnvelopeGenerator.Domain.Entities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using EnvelopeGenerator.Application.Receivers.Commands; -using EnvelopeGenerator.Application.Common.Dto.Receiver; -using EnvelopeGenerator.Application.Common.Interfaces.Services; namespace EnvelopeGenerator.GeneratorAPI.Controllers; @@ -14,22 +9,22 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers; /// Controller für die Verwaltung von Empfängern. /// /// -/// Dieser Controller bietet Endpunkte für CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) -/// sowie zusätzliche Funktionen wie das Abrufen von Empfängern basierend auf E-Mail-Adresse oder Signatur. +/// Dieser Controller bietet Endpunkte für das Abrufen von Empfängern basierend auf E-Mail-Adresse oder Signatur. /// [Route("api/[controller]")] [ApiController] [Authorize] -[Obsolete("Use MediatR")] -public class ReceiverController : CRUDControllerBaseWithErrorHandling +public class ReceiverController : ControllerBase { + private readonly IMediator _mediator; + /// /// Initialisiert eine neue Instanz des -Controllers. /// - /// Der Logger für die Protokollierung. - /// Der Dienst für Empfängeroperationen. - public ReceiverController(ILogger logger, IReceiverService service) : base(logger, service) + /// Mediator für Anfragen. + public ReceiverController(IMediator mediator) { + _mediator = mediator; } /// @@ -40,60 +35,13 @@ public class ReceiverController : CRUDControllerBaseWithErrorHandling Get([FromQuery] ReadReceiverQuery receiver) { - if (receiver.Id is null && receiver.EmailAddress is null && receiver.Signature is null) - return await base.GetAll(); - - if (receiver.Id is int id) - return await _service.ReadByIdAsync(id).ThenAsync( - Success: Ok, - Fail: IActionResult (msg, ntc) => - { - return NotFound(); - }); - - return await _service.ReadByAsync(emailAddress: receiver.EmailAddress, signature: receiver.Signature).ThenAsync( - Success: Ok, - Fail: IActionResult (msg, ntc) => - { - return NotFound(); - }); - } - - #region REMOVED ENDPOINTS - /// - /// Diese Methode ist deaktiviert und wird nicht verwendet. - /// - [NonAction] - public override Task GetAll() => base.GetAll(); - - /// - /// Diese Methode ist deaktiviert und wird nicht verwendet. - /// - [NonAction] - public override Task Delete([FromRoute] int id) => base.Delete(id); - - /// - /// Diese Methode ist deaktiviert und wird nicht verwendet. - /// - [NonAction] - public override Task Update(UpdateReceiverCommand updateDto) => base.Update(updateDto); - - /// - /// Diese Methode ist deaktiviert und wird nicht verwendet. - /// - [NonAction] - public override Task Create(CreateReceiverCommand createDto) - { - return base.Create(createDto); - } - - /// - /// Diese Methode ist deaktiviert und wird nicht verwendet. - /// - [NonAction] - public override Task GetById([FromRoute] int id) - { - return base.GetById(id); + if (!receiver.HasAnyCriteria) + { + var all = await _mediator.Send(new ReadReceiverQuery()); + return Ok(all); + } + + var result = await _mediator.Send(receiver); + return result is null ? NotFound() : Ok(result); } - #endregion } \ No newline at end of file