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
This commit is contained in:
@@ -33,7 +33,18 @@ public record CreateEnvelopeCommand : IRequest<EnvelopeDto?>
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// ID des Absenders
|
/// ID des Absenders
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int UserId { get; set; }
|
internal int UserId { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool Authorize(int userId)
|
||||||
|
{
|
||||||
|
UserId = userId;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines which component is used for envelope processing.
|
/// Determines which component is used for envelope processing.
|
||||||
|
|||||||
@@ -90,19 +90,18 @@ public class EnvelopeController : ControllerBase
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="envelope"></param>
|
/// <param name="command"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[NonAction]
|
[NonAction]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> CreateAsync([FromQuery] CreateEnvelopeCommand envelope)
|
public async Task<IActionResult> CreateAsync([FromBody] CreateEnvelopeCommand command)
|
||||||
{
|
{
|
||||||
envelope.UserId = User.GetId();
|
var res = await _mediator.Send(command.Authorize(User.GetId()));
|
||||||
var res = await _mediator.Send(envelope);
|
|
||||||
|
|
||||||
if (res is null)
|
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);
|
return StatusCode(StatusCodes.Status500InternalServerError);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ public class EnvelopeReceiverController : ControllerBase
|
|||||||
/// Datenübertragungsobjekt mit Informationen zu Umschlägen, Empfängern und Unterschriften.
|
/// Datenübertragungsobjekt mit Informationen zu Umschlägen, Empfängern und Unterschriften.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="request"></param>
|
/// <param name="request"></param>
|
||||||
|
/// <param name="cancel"></param>
|
||||||
/// <returns>HTTP-Antwort</returns>
|
/// <returns>HTTP-Antwort</returns>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// Sample request:
|
/// Sample request:
|
||||||
@@ -140,13 +141,10 @@ public class EnvelopeReceiverController : ControllerBase
|
|||||||
/// <response code="500">Es handelt sich um einen unerwarteten Fehler. Die Protokolle sollten überprüft werden.</response>
|
/// <response code="500">Es handelt sich um einen unerwarteten Fehler. Die Protokolle sollten überprüft werden.</response>
|
||||||
[Authorize]
|
[Authorize]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> CreateAsync([FromBody] CreateEnvelopeReceiverCommand request)
|
public async Task<IActionResult> CreateAsync([FromBody] CreateEnvelopeReceiverCommand request, CancellationToken cancel)
|
||||||
{
|
{
|
||||||
CancellationToken cancel = default;
|
|
||||||
int userId = User.GetId();
|
|
||||||
|
|
||||||
#region Create Envelope
|
#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
|
#endregion
|
||||||
|
|
||||||
#region Add receivers
|
#region Add receivers
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
using DigitalData.Core.Abstraction.Application.DTO;
|
using MediatR;
|
||||||
using DigitalData.Core.API;
|
|
||||||
using EnvelopeGenerator.Application.Receivers.Queries;
|
using EnvelopeGenerator.Application.Receivers.Queries;
|
||||||
using EnvelopeGenerator.Domain.Entities;
|
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
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;
|
namespace EnvelopeGenerator.GeneratorAPI.Controllers;
|
||||||
|
|
||||||
@@ -14,22 +9,22 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers;
|
|||||||
/// Controller für die Verwaltung von Empfängern.
|
/// Controller für die Verwaltung von Empfängern.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// Dieser Controller bietet Endpunkte für CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen)
|
/// Dieser Controller bietet Endpunkte für das Abrufen von Empfängern basierend auf E-Mail-Adresse oder Signatur.
|
||||||
/// sowie zusätzliche Funktionen wie das Abrufen von Empfängern basierend auf E-Mail-Adresse oder Signatur.
|
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
[Route("api/[controller]")]
|
[Route("api/[controller]")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
[Obsolete("Use MediatR")]
|
public class ReceiverController : ControllerBase
|
||||||
public class ReceiverController : CRUDControllerBaseWithErrorHandling<IReceiverService, CreateReceiverCommand, ReceiverDto, UpdateReceiverCommand, Receiver, int>
|
|
||||||
{
|
{
|
||||||
|
private readonly IMediator _mediator;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialisiert eine neue Instanz des <see cref="ReceiverController"/>-Controllers.
|
/// Initialisiert eine neue Instanz des <see cref="ReceiverController"/>-Controllers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Der Logger für die Protokollierung.</param>
|
/// <param name="mediator">Mediator für Anfragen.</param>
|
||||||
/// <param name="service">Der Dienst für Empfängeroperationen.</param>
|
public ReceiverController(IMediator mediator)
|
||||||
public ReceiverController(ILogger<ReceiverController> logger, IReceiverService service) : base(logger, service)
|
|
||||||
{
|
{
|
||||||
|
_mediator = mediator;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -40,60 +35,13 @@ public class ReceiverController : CRUDControllerBaseWithErrorHandling<IReceiverS
|
|||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<IActionResult> Get([FromQuery] ReadReceiverQuery receiver)
|
public async Task<IActionResult> Get([FromQuery] ReadReceiverQuery receiver)
|
||||||
{
|
{
|
||||||
if (receiver.Id is null && receiver.EmailAddress is null && receiver.Signature is null)
|
if (!receiver.HasAnyCriteria)
|
||||||
return await base.GetAll();
|
|
||||||
|
|
||||||
if (receiver.Id is int id)
|
|
||||||
return await _service.ReadByIdAsync(id).ThenAsync(
|
|
||||||
Success: Ok,
|
|
||||||
Fail: IActionResult (msg, ntc) =>
|
|
||||||
{
|
{
|
||||||
return NotFound();
|
var all = await _mediator.Send(new ReadReceiverQuery());
|
||||||
});
|
return Ok(all);
|
||||||
|
|
||||||
return await _service.ReadByAsync(emailAddress: receiver.EmailAddress, signature: receiver.Signature).ThenAsync(
|
|
||||||
Success: Ok,
|
|
||||||
Fail: IActionResult (msg, ntc) =>
|
|
||||||
{
|
|
||||||
return NotFound();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region REMOVED ENDPOINTS
|
var result = await _mediator.Send(receiver);
|
||||||
/// <summary>
|
return result is null ? NotFound() : Ok(result);
|
||||||
/// Diese Methode ist deaktiviert und wird nicht verwendet.
|
|
||||||
/// </summary>
|
|
||||||
[NonAction]
|
|
||||||
public override Task<IActionResult> GetAll() => base.GetAll();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Diese Methode ist deaktiviert und wird nicht verwendet.
|
|
||||||
/// </summary>
|
|
||||||
[NonAction]
|
|
||||||
public override Task<IActionResult> Delete([FromRoute] int id) => base.Delete(id);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Diese Methode ist deaktiviert und wird nicht verwendet.
|
|
||||||
/// </summary>
|
|
||||||
[NonAction]
|
|
||||||
public override Task<IActionResult> Update(UpdateReceiverCommand updateDto) => base.Update(updateDto);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Diese Methode ist deaktiviert und wird nicht verwendet.
|
|
||||||
/// </summary>
|
|
||||||
[NonAction]
|
|
||||||
public override Task<IActionResult> Create(CreateReceiverCommand createDto)
|
|
||||||
{
|
|
||||||
return base.Create(createDto);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Diese Methode ist deaktiviert und wird nicht verwendet.
|
|
||||||
/// </summary>
|
|
||||||
[NonAction]
|
|
||||||
public override Task<IActionResult> GetById([FromRoute] int id)
|
|
||||||
{
|
|
||||||
return base.GetById(id);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user