Refactor envelope and user query structures
- Introduced a new `UserQuery` record to encapsulate user-related information, replacing individual fields in `EnvelopeQuery`. - Added a `ReferenceType` property in `EnvelopeHistoryQuery` to enhance reference handling logic. - Modified `EnvelopeQuery` to use the new `UserQuery` structure, simplifying the data model. - Updated `HistoryController` with a new constructor and restructured the `GetReferenceTypes` method. - Introduced `ReadEnvelopeHistoryQuery` to allow for more specific envelope history queries. - Overall improvements enhance code structure, clarity, and querying capabilities.
This commit is contained in:
parent
9f186afdff
commit
2cb5d0c0d5
@ -1,5 +1,6 @@
|
|||||||
using EnvelopeGenerator.Application.Envelopes;
|
using EnvelopeGenerator.Application.Envelopes;
|
||||||
using EnvelopeGenerator.Application.Receivers;
|
using EnvelopeGenerator.Application.Receivers;
|
||||||
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.Application.EnvelopeHistories;
|
namespace EnvelopeGenerator.Application.EnvelopeHistories;
|
||||||
|
|
||||||
@ -13,4 +14,10 @@ public record EnvelopeHistoryQuery<TEnvelopeQuery, TReceiverQuery>(int EnvelopeI
|
|||||||
where TEnvelopeQuery : EnvelopeQuery
|
where TEnvelopeQuery : EnvelopeQuery
|
||||||
where TReceiverQuery : ReceiverQuery
|
where TReceiverQuery : ReceiverQuery
|
||||||
{
|
{
|
||||||
|
public ReferenceType ReferenceType =>
|
||||||
|
Envelope?.User is not null
|
||||||
|
? ReferenceType.Receiver
|
||||||
|
: Receiver is not null
|
||||||
|
? ReferenceType.Receiver
|
||||||
|
: ReferenceType.System;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,17 @@
|
|||||||
|
using EnvelopeGenerator.Application.Envelopes.Queries.Read;
|
||||||
|
using EnvelopeGenerator.Application.Receivers.Queries.Read;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.EnvelopeHistories.Queries.Read;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Repräsentiert eine Abfrage für die Verlaufshistorie eines Umschlags.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="EnvelopeId">Die eindeutige Kennung des Umschlags.</param>
|
||||||
|
/// <param name="Envelope">Die Abfrage, die den Umschlag beschreibt.</param>
|
||||||
|
/// <param name="Receiver">Die Abfrage, die den Empfänger beschreibt.</param>
|
||||||
|
public record ReadEnvelopeHistoryQuery(
|
||||||
|
int EnvelopeId,
|
||||||
|
ReadEnvelopeQuery? Envelope,
|
||||||
|
ReadReceiverQuery? Receiver,
|
||||||
|
StatusQuery? Status)
|
||||||
|
: EnvelopeHistoryQuery<ReadEnvelopeQuery, ReadReceiverQuery>(EnvelopeId, Envelope, Receiver, Status);
|
||||||
@ -6,15 +6,18 @@ namespace EnvelopeGenerator.Application.Envelopes;
|
|||||||
/// Repräsentiert eine Abfrage für Umschläge.
|
/// Repräsentiert eine Abfrage für Umschläge.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Id">Die eindeutige Kennung des Umschlags.</param>
|
/// <param name="Id">Die eindeutige Kennung des Umschlags.</param>
|
||||||
/// <param name="UserId">Die Kennung des Benutzers, der den Umschlag erstellt hat.</param>
|
/// <param name="User">Absender des Schreibens</param>
|
||||||
/// <param name="Username">Der Benutzername des Benutzers, der den Umschlag erstellt hat.</param>
|
|
||||||
/// <param name="Email">Die E-Mail-Adresse des Benutzers, der den Umschlag erstellt hat.</param>
|
|
||||||
/// <param name="Status">Der Status des Umschlags.</param>
|
/// <param name="Status">Der Status des Umschlags.</param>
|
||||||
/// <param name="Uuid">Die universell eindeutige Kennung des Umschlags.</param>
|
/// <param name="Uuid">Die universell eindeutige Kennung des Umschlags.</param>
|
||||||
public record EnvelopeQuery(
|
public record EnvelopeQuery(
|
||||||
int? Id = null,
|
int? Id = null,
|
||||||
int? UserId = null,
|
UserQuery? User = null,
|
||||||
string? Username = null,
|
|
||||||
string? Email = null,
|
|
||||||
int? Status = null,
|
int? Status = null,
|
||||||
string? Uuid = null) : IRequest;
|
string? Uuid = null) : IRequest
|
||||||
|
{
|
||||||
|
public int? UserId => User?.Id;
|
||||||
|
|
||||||
|
public string? Username => User?.Username;
|
||||||
|
|
||||||
|
public string? UserEmail => User?.Username;
|
||||||
|
};
|
||||||
5
EnvelopeGenerator.Application/Envelopes/UserQuery.cs
Normal file
5
EnvelopeGenerator.Application/Envelopes/UserQuery.cs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Envelopes;
|
||||||
|
|
||||||
|
public record UserQuery(int? Id = null, string? Username = null, string? Email = null)
|
||||||
|
{
|
||||||
|
}
|
||||||
@ -1,73 +1,82 @@
|
|||||||
using EnvelopeGenerator.Application.Contracts.Services;
|
using EnvelopeGenerator.Application.Contracts.Services;
|
||||||
|
using EnvelopeGenerator.Application.EnvelopeHistories.Queries.Read;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using System;
|
|
||||||
using static EnvelopeGenerator.Common.Constants;
|
using static EnvelopeGenerator.Common.Constants;
|
||||||
|
|
||||||
namespace EnvelopeGenerator.GeneratorAPI.Controllers
|
|
||||||
|
namespace EnvelopeGenerator.GeneratorAPI.Controllers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dieser Controller bietet Endpunkte für den Zugriff auf die Verlaufshistorie von Umschlägen.
|
||||||
|
/// </summary>
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
[Authorize]
|
||||||
|
public class HistoryController : ControllerBase
|
||||||
{
|
{
|
||||||
[Route("api/[controller]")]
|
private readonly ILogger<HistoryController> _logger;
|
||||||
[ApiController]
|
|
||||||
[Authorize]
|
private readonly IEnvelopeHistoryService _service;
|
||||||
public class HistoryController : ControllerBase
|
|
||||||
|
/// <summary>
|
||||||
|
/// Konstruktor für den HistoryController.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="logger">Der Logger, der für das Protokollieren von Informationen verwendet wird.</param>
|
||||||
|
/// <param name="service">Der Dienst, der für die Verarbeitung der Verlaufshistorie verantwortlich ist.</param>
|
||||||
|
public HistoryController(ILogger<HistoryController> logger, IEnvelopeHistoryService service)
|
||||||
{
|
{
|
||||||
private readonly ILogger<HistoryController> _logger;
|
_logger = logger;
|
||||||
|
_service = service;
|
||||||
|
}
|
||||||
|
|
||||||
private readonly IEnvelopeHistoryService _service;
|
[HttpGet("reference-type")]
|
||||||
|
[Authorize]
|
||||||
|
public IActionResult GetReferenceTypes()
|
||||||
|
{
|
||||||
|
// Enum to Key-Value pair
|
||||||
|
var referenceTypes = Enum.GetValues(typeof(ReferenceType))
|
||||||
|
.Cast<ReferenceType>()
|
||||||
|
.ToDictionary(rt =>
|
||||||
|
{
|
||||||
|
var key = rt.ToString();
|
||||||
|
var keyAsCamelCase = char.ToLower(key[0]) + key[1..];
|
||||||
|
return keyAsCamelCase;
|
||||||
|
}, rt => (int)rt);
|
||||||
|
|
||||||
public HistoryController(ILogger<HistoryController> logger, IEnvelopeHistoryService service)
|
return Ok(referenceTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ruft die gesamte Verlaufshistorie von Umschlägen basierend auf den angegebenen Abfrageparametern ab.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="history">Die Abfrageparameter, die die Filterkriterien für die Verlaufshistorie definieren.</param>
|
||||||
|
/// <returns>Eine Liste von Verlaufseinträgen, die den angegebenen Kriterien entsprechen.</returns>
|
||||||
|
[HttpGet]
|
||||||
|
[Authorize]
|
||||||
|
public async Task<IActionResult> GetAllAsync([FromQuery] ReadEnvelopeHistoryQuery history)
|
||||||
|
{
|
||||||
|
ReferenceType? refTypEnum = history.ReferenceType;
|
||||||
|
bool withReceiver = false;
|
||||||
|
bool withSender = false;
|
||||||
|
|
||||||
|
switch (refTypEnum)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
case ReferenceType.Receiver:
|
||||||
_service = service;
|
withReceiver = true;
|
||||||
|
break;
|
||||||
|
case ReferenceType.Sender:
|
||||||
|
withSender = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("reference-type")]
|
var histories = await _service.ReadAsync(
|
||||||
[Authorize]
|
envelopeId: history.EnvelopeId,
|
||||||
public IActionResult GetReferenceTypes()
|
//userReference: history.r,
|
||||||
{
|
referenceType: refTypEnum,
|
||||||
// Enum to Key-Value pair
|
withSender: withSender,
|
||||||
var referenceTypes = Enum.GetValues(typeof(ReferenceType))
|
withReceiver: withReceiver);
|
||||||
.Cast<ReferenceType>()
|
|
||||||
.ToDictionary(rt =>
|
|
||||||
{
|
|
||||||
var key = rt.ToString();
|
|
||||||
var keyAsCamelCase = char.ToLower(key[0]) + key[1..];
|
|
||||||
return keyAsCamelCase;
|
|
||||||
}, rt => (int)rt);
|
|
||||||
|
|
||||||
return Ok(referenceTypes);
|
return Ok(histories);
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Authorize]
|
|
||||||
public async Task<IActionResult> GetAllAsync([FromQuery] int? envelopeId = null, [FromQuery] string? userReference = null, [FromQuery] int? referenceType = null, [FromQuery] bool withSender = false, [FromQuery] bool withReceiver = false)
|
|
||||||
{
|
|
||||||
ReferenceType? refTypEnum = null;
|
|
||||||
|
|
||||||
if (referenceType is int refTypInt)
|
|
||||||
if (Enum.IsDefined(typeof(ReferenceType), refTypInt))
|
|
||||||
refTypEnum = (ReferenceType)refTypInt;
|
|
||||||
else
|
|
||||||
throw new ArgumentException($"The provided referenceType '{referenceType}' is not valid. It must correspond to a valid value in the {nameof(ReferenceType)} enum.");
|
|
||||||
|
|
||||||
switch(referenceType)
|
|
||||||
{
|
|
||||||
case (int)ReferenceType.Receiver:
|
|
||||||
withReceiver = true;
|
|
||||||
break;
|
|
||||||
case (int)ReferenceType.Sender:
|
|
||||||
withSender = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var histories = await _service.ReadAsync(
|
|
||||||
envelopeId: envelopeId,
|
|
||||||
userReference: userReference,
|
|
||||||
referenceType: refTypEnum,
|
|
||||||
withSender: withSender,
|
|
||||||
withReceiver: withReceiver);
|
|
||||||
|
|
||||||
return Ok(histories);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user