Add MediatR support for envelope history queries

Updated project references and introduced MediatR for handling
envelope history queries. Added new mapping profile and response
class, and refactored the HistoryController to utilize the
mediator pattern for improved query handling.
This commit is contained in:
Developer 02
2025-05-12 10:55:19 +02:00
parent 9b945ce232
commit af280ee64e
6 changed files with 140 additions and 47 deletions

View File

@@ -1,6 +1,7 @@
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.Histories.Queries.Read;
using EnvelopeGenerator.Extensions;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
@@ -20,15 +21,19 @@ public class HistoryController : ControllerBase
private readonly IMemoryCache _memoryCache;
private readonly IMediator _mediator;
/// <summary>
/// Konstruktor für den HistoryController.
/// </summary>
/// <param name="service">Der Dienst, der für die Verarbeitung der Umschlaghistorie verantwortlich ist.</param>
/// <param name="memoryCache"></param>
public HistoryController(IEnvelopeHistoryService service, IMemoryCache memoryCache)
/// param name="mediator"
public HistoryController(IEnvelopeHistoryService service, IMemoryCache memoryCache, IMediator mediator)
{
_service = service;
_memoryCache = memoryCache;
_mediator = mediator;
}
/// <summary>
@@ -96,7 +101,7 @@ public class HistoryController : ControllerBase
/// <summary>
/// Ruft die gesamte Umschlaghistorie basierend auf den angegebenen Abfrageparametern ab.
/// </summary>
/// <param name="history">Die Abfrageparameter, die die Filterkriterien für die Umschlaghistorie definieren.</param>
/// <param name="historyQuery">Die Abfrageparameter, die die Filterkriterien für die Umschlaghistorie definieren.</param>
/// <returns>Eine Liste von Historieneinträgen, die den angegebenen Kriterien entsprechen, oder nur der letzte Eintrag.</returns>
/// <response code="200">Die Anfrage war erfolgreich, und die Umschlaghistorie wird zurückgegeben.</response>
/// <response code="400">Die Anfrage war ungültig oder unvollständig.</response>
@@ -105,33 +110,10 @@ public class HistoryController : ControllerBase
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
[HttpGet]
[Authorize]
public async Task<IActionResult> GetAllAsync([FromQuery] ReadHistoryQuery history)
public async Task<IActionResult> GetAllAsync([FromQuery] ReadHistoryQuery historyQuery)
{
bool withReceiver = false;
bool withSender = false;
switch (history.Related)
{
case ReferenceType.Receiver:
withReceiver = true;
break;
case ReferenceType.Sender:
withSender = true;
break;
}
var history = await _mediator.Send(historyQuery);
var histories = await _service.ReadAsync(
envelopeId: history.EnvelopeId,
referenceType: history.Related,
withSender: withSender,
withReceiver: withReceiver);
if(history.Status is not null)
histories = histories.Where(h => h.Status == (int)history.Status);
if (!histories.Any())
return NotFound();
return Ok((history.OnlyLast ?? false) ? histories.MaxBy(h => h.AddedWhen) : histories);
return Ok((historyQuery.OnlyLast ?? false) ? history.MaxBy(h => h.AddedWhen) : history);
}
}