diff --git a/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs b/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs index 4784ec11..04df49fd 100644 --- a/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs +++ b/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs @@ -1,5 +1,6 @@ using EnvelopeGenerator.Application.Envelopes; using EnvelopeGenerator.Application.Receivers; +using static EnvelopeGenerator.Common.Constants; namespace EnvelopeGenerator.Application.EnvelopeHistories; @@ -13,4 +14,10 @@ public record EnvelopeHistoryQuery(int EnvelopeI where TEnvelopeQuery : EnvelopeQuery where TReceiverQuery : ReceiverQuery { + public ReferenceType ReferenceType => + Envelope?.User is not null + ? ReferenceType.Receiver + : Receiver is not null + ? ReferenceType.Receiver + : ReferenceType.System; } diff --git a/EnvelopeGenerator.Application/EnvelopeHistories/Queries/Read/ReadEnvelopeHistoryQuery.cs b/EnvelopeGenerator.Application/EnvelopeHistories/Queries/Read/ReadEnvelopeHistoryQuery.cs new file mode 100644 index 00000000..c9fd4593 --- /dev/null +++ b/EnvelopeGenerator.Application/EnvelopeHistories/Queries/Read/ReadEnvelopeHistoryQuery.cs @@ -0,0 +1,17 @@ +using EnvelopeGenerator.Application.Envelopes.Queries.Read; +using EnvelopeGenerator.Application.Receivers.Queries.Read; + +namespace EnvelopeGenerator.Application.EnvelopeHistories.Queries.Read; + +/// +/// Repräsentiert eine Abfrage für die Verlaufshistorie eines Umschlags. +/// +/// Die eindeutige Kennung des Umschlags. +/// Die Abfrage, die den Umschlag beschreibt. +/// Die Abfrage, die den Empfänger beschreibt. +public record ReadEnvelopeHistoryQuery( + int EnvelopeId, + ReadEnvelopeQuery? Envelope, + ReadReceiverQuery? Receiver, + StatusQuery? Status) + : EnvelopeHistoryQuery(EnvelopeId, Envelope, Receiver, Status); diff --git a/EnvelopeGenerator.Application/Envelopes/EnvelopeQuery.cs b/EnvelopeGenerator.Application/Envelopes/EnvelopeQuery.cs index 60b770e6..8507b102 100644 --- a/EnvelopeGenerator.Application/Envelopes/EnvelopeQuery.cs +++ b/EnvelopeGenerator.Application/Envelopes/EnvelopeQuery.cs @@ -6,15 +6,18 @@ namespace EnvelopeGenerator.Application.Envelopes; /// Repräsentiert eine Abfrage für Umschläge. /// /// Die eindeutige Kennung des Umschlags. -/// Die Kennung des Benutzers, der den Umschlag erstellt hat. -/// Der Benutzername des Benutzers, der den Umschlag erstellt hat. -/// Die E-Mail-Adresse des Benutzers, der den Umschlag erstellt hat. +/// Absender des Schreibens /// Der Status des Umschlags. /// Die universell eindeutige Kennung des Umschlags. public record EnvelopeQuery( int? Id = null, - int? UserId = null, - string? Username = null, - string? Email = null, + UserQuery? User = null, int? Status = null, - string? Uuid = null) : IRequest; \ No newline at end of file + string? Uuid = null) : IRequest +{ + public int? UserId => User?.Id; + + public string? Username => User?.Username; + + public string? UserEmail => User?.Username; +}; \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Envelopes/UserQuery.cs b/EnvelopeGenerator.Application/Envelopes/UserQuery.cs new file mode 100644 index 00000000..0c57327b --- /dev/null +++ b/EnvelopeGenerator.Application/Envelopes/UserQuery.cs @@ -0,0 +1,5 @@ +namespace EnvelopeGenerator.Application.Envelopes; + +public record UserQuery(int? Id = null, string? Username = null, string? Email = null) +{ +} diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs index ce0abab4..89dcf8ce 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/HistoryController.cs @@ -1,73 +1,82 @@ using EnvelopeGenerator.Application.Contracts.Services; +using EnvelopeGenerator.Application.EnvelopeHistories.Queries.Read; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using System; using static EnvelopeGenerator.Common.Constants; -namespace EnvelopeGenerator.GeneratorAPI.Controllers + +namespace EnvelopeGenerator.GeneratorAPI.Controllers; + +/// +/// Dieser Controller bietet Endpunkte für den Zugriff auf die Verlaufshistorie von Umschlägen. +/// +[Route("api/[controller]")] +[ApiController] +[Authorize] +public class HistoryController : ControllerBase { - [Route("api/[controller]")] - [ApiController] - [Authorize] - public class HistoryController : ControllerBase + private readonly ILogger _logger; + + private readonly IEnvelopeHistoryService _service; + + /// + /// Konstruktor für den HistoryController. + /// + /// Der Logger, der für das Protokollieren von Informationen verwendet wird. + /// Der Dienst, der für die Verarbeitung der Verlaufshistorie verantwortlich ist. + public HistoryController(ILogger logger, IEnvelopeHistoryService service) { - private readonly ILogger _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() + .ToDictionary(rt => + { + var key = rt.ToString(); + var keyAsCamelCase = char.ToLower(key[0]) + key[1..]; + return keyAsCamelCase; + }, rt => (int)rt); - public HistoryController(ILogger logger, IEnvelopeHistoryService service) + return Ok(referenceTypes); + } + + /// + /// Ruft die gesamte Verlaufshistorie von Umschlägen basierend auf den angegebenen Abfrageparametern ab. + /// + /// Die Abfrageparameter, die die Filterkriterien für die Verlaufshistorie definieren. + /// Eine Liste von Verlaufseinträgen, die den angegebenen Kriterien entsprechen. + [HttpGet] + [Authorize] + public async Task GetAllAsync([FromQuery] ReadEnvelopeHistoryQuery history) + { + ReferenceType? refTypEnum = history.ReferenceType; + bool withReceiver = false; + bool withSender = false; + + switch (refTypEnum) { - _logger = logger; - _service = service; + case ReferenceType.Receiver: + withReceiver = true; + break; + case ReferenceType.Sender: + withSender = true; + break; } - [HttpGet("reference-type")] - [Authorize] - public IActionResult GetReferenceTypes() - { - // Enum to Key-Value pair - var referenceTypes = Enum.GetValues(typeof(ReferenceType)) - .Cast() - .ToDictionary(rt => - { - var key = rt.ToString(); - var keyAsCamelCase = char.ToLower(key[0]) + key[1..]; - return keyAsCamelCase; - }, rt => (int)rt); + var histories = await _service.ReadAsync( + envelopeId: history.EnvelopeId, + //userReference: history.r, + referenceType: refTypEnum, + withSender: withSender, + withReceiver: withReceiver); - return Ok(referenceTypes); - } - - [HttpGet] - [Authorize] - public async Task 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); - } + return Ok(histories); } } \ No newline at end of file