From e7bc43b3397e70476708a129989e4957db1356d1 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Thu, 10 Apr 2025 16:01:21 +0200 Subject: [PATCH] Refactor envelope query structures and controller methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Aktualisiert `EnvelopeHistoryQuery` um optionale `Envelope`, `Receiver` und neue `Status` Parameter für mehr Flexibilität zu enthalten. - Vereinfachte `EnvelopeReceiverQuery`, so dass sie nur noch einen `Status`-Parameter enthält und unnötige Parameter entfernt wurden. - ReadEnvelopeReceiverQuery„ wurde an das neue Design von ‚EnvelopeReceiverQuery‘ angepasst, indem ein “Status"-Parameter akzeptiert wird. - Verbesserte XML-Dokumentation in `EnvelopeController` für mehr Klarheit über Methoden und Parameter. - Die `GetAsync`-Methode wurde gestrafft, um einen `StatusQuery`-Parameter zu akzeptieren, der separate Status-Parameter ersetzt. - Einführung eines neuen `StatusQuery`-Datensatzes, um Statuswerte mit detaillierter Dokumentation zu kapseln. - Aktualisierte „using“-Direktiven in relevanten Dateien, um den neuen „EnvelopeHistories“-Namensraum einzubeziehen. --- .../EnvelopeHistories/EnvelopeHistoryQuery.cs | 2 +- .../EnvelopeHistories/StatusQuery.cs | 41 +++++++++++++++++++ .../EnvelopeReceiverQuery.cs | 8 +--- .../Queries/Read/ReadEnvelopeReceiverQuery.cs | 6 ++- .../Controllers/EnvelopeController.cs | 29 +++++++++---- 5 files changed, 70 insertions(+), 16 deletions(-) create mode 100644 EnvelopeGenerator.Application/EnvelopeHistories/StatusQuery.cs diff --git a/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs b/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs index f179679b..4784ec11 100644 --- a/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs +++ b/EnvelopeGenerator.Application/EnvelopeHistories/EnvelopeHistoryQuery.cs @@ -9,7 +9,7 @@ namespace EnvelopeGenerator.Application.EnvelopeHistories; /// Die eindeutige Kennung des Umschlags. /// Die Abfrage, die den Umschlag beschreibt. /// Die Abfrage, die den Empfänger beschreibt. -public record EnvelopeHistoryQuery(int EnvelopeId, TEnvelopeQuery Envelope, TReceiverQuery Receiver) +public record EnvelopeHistoryQuery(int EnvelopeId, TEnvelopeQuery? Envelope, TReceiverQuery? Receiver = null, StatusQuery? Status = null) where TEnvelopeQuery : EnvelopeQuery where TReceiverQuery : ReceiverQuery { diff --git a/EnvelopeGenerator.Application/EnvelopeHistories/StatusQuery.cs b/EnvelopeGenerator.Application/EnvelopeHistories/StatusQuery.cs new file mode 100644 index 00000000..1f7961fd --- /dev/null +++ b/EnvelopeGenerator.Application/EnvelopeHistories/StatusQuery.cs @@ -0,0 +1,41 @@ +namespace EnvelopeGenerator.Application.EnvelopeHistories; + +/// +/// Repräsentiert den Status eines Umschlags und dessen Beziehung zum Empfänger. (vgl. auch +/// +/// Invalid (0): Ungültiger Status. +/// EnvelopeCreated (1001): Der Umschlag wurde erstellt. +/// EnvelopeSaved (1002): Der Umschlag wurde gespeichert. +/// EnvelopeQueued (1003): Der Umschlag wurde zur Verarbeitung eingeplant. +/// EnvelopeSent (1004): Der Umschlag wurde versendet. (Nicht verwendet) +/// EnvelopePartlySigned (1005): Der Umschlag wurde teilweise unterschrieben. +/// EnvelopeCompletelySigned (1006): Der Umschlag wurde vollständig unterschrieben. +/// EnvelopeReportCreated (1007): Ein Abschlussbericht wurde für den Umschlag erstellt. +/// EnvelopeArchived (1008): Der Umschlag wurde archiviert. +/// EnvelopeDeleted (1009): Der Umschlag wurde gelöscht. +/// AccessCodeRequested (2001): Der Zugriffscode wurde angefordert. +/// AccessCodeCorrect (2002): Der Zugriffscode war korrekt. +/// AccessCodeIncorrect (2003): Der Zugriffscode war falsch. +/// DocumentOpened (2004): Das Dokument wurde geöffnet. +/// DocumentSigned (2005): Ein Dokument wurde unterschrieben. +/// SignatureConfirmed (2006): Die Signatur wurde bestätigt. +/// DocumentRejected (2007): Ein Dokument wurde abgelehnt. +/// EnvelopeShared (2008): Der Umschlag wurde geteilt. +/// EnvelopeViewed (2009): Der Umschlag wurde angesehen. +/// DocumentForwarded (4001): Das Dokument wurde weitergeleitet. +/// MessageInvitationSent (3001): Einladung wurde gesendet (vom Trigger verwendet). +/// MessageAccessCodeSent (3002): Zugriffscode wurde gesendet. +/// MessageConfirmationSent (3003): Bestätigungsnachricht wurde gesendet. +/// MessageDeletionSent (3004): Löschbenachrichtigung wurde gesendet. +/// MessageCompletionSent (3005): Abschlussbenachrichtigung wurde gesendet. +/// +/// +/// Der minimale Statuswert, der berücksichtigt werden soll. +/// Der maximale Statuswert, der berücksichtigt werden soll. +/// Eine Liste von Statuswerten, die ignoriert werden sollen. +public record StatusQuery( + int? Min = null, + int? Max = null, + int[]? Ignore = null) +{ +} diff --git a/EnvelopeGenerator.Application/EnvelopeReceivers/EnvelopeReceiverQuery.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/EnvelopeReceiverQuery.cs index b4bc1de4..3eccc2c8 100644 --- a/EnvelopeGenerator.Application/EnvelopeReceivers/EnvelopeReceiverQuery.cs +++ b/EnvelopeGenerator.Application/EnvelopeReceivers/EnvelopeReceiverQuery.cs @@ -1,5 +1,4 @@ -using EnvelopeGenerator.Application.Envelopes.Queries.Read; -using EnvelopeGenerator.Application.Receivers.Queries.Read; +using EnvelopeGenerator.Application.EnvelopeHistories; namespace EnvelopeGenerator.Application.EnvelopeReceivers; @@ -9,7 +8,4 @@ namespace EnvelopeGenerator.Application.EnvelopeReceivers; /// /// /// -public record EnvelopeReceiverQuery( - int? MinStatus = null, - int? MaxStatus = null, - int[]? IgnoreStatus = null); \ No newline at end of file +public record EnvelopeReceiverQuery(StatusQuery Status); \ No newline at end of file diff --git a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/Read/ReadEnvelopeReceiverQuery.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/Read/ReadEnvelopeReceiverQuery.cs index 3bb56aaa..20894771 100644 --- a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/Read/ReadEnvelopeReceiverQuery.cs +++ b/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/Read/ReadEnvelopeReceiverQuery.cs @@ -1,4 +1,5 @@ -using EnvelopeGenerator.Application.Envelopes.Queries.Read; +using EnvelopeGenerator.Application.EnvelopeHistories; +using EnvelopeGenerator.Application.Envelopes.Queries.Read; using EnvelopeGenerator.Application.Receivers.Queries.Read; using MediatR; @@ -14,7 +15,8 @@ namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries.Read; /// Die Antwort enthält Details wie den Status, die Zuordnung zwischen Umschlag und Empfänger /// sowie zusätzliche Metadaten. /// -public record ReadEnvelopeReceiverQuery : EnvelopeReceiverQuery, IRequest +/// Umschlag oder Empfängerstatus. +public record ReadEnvelopeReceiverQuery(StatusQuery Status) : EnvelopeReceiverQuery(Status), IRequest { /// /// Der Umschlag, der mit dem Empfänger verknüpft ist. diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs index f6e4d17c..5cf96857 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs @@ -1,10 +1,17 @@ using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts.Services; +using EnvelopeGenerator.Application.EnvelopeHistories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.GeneratorAPI.Controllers; +/// +/// Dieser Controller stellt Endpunkte für die Verwaltung von Umschlägen bereit. +/// +/// +/// Die API ermöglicht das Abrufen und Verwalten von Umschlägen basierend auf Benutzerinformationen und Statusfiltern. +/// [Route("api/[controller]")] [ApiController] [Authorize] @@ -12,24 +19,32 @@ public class EnvelopeController : ControllerBase { private readonly ILogger _logger; private readonly IEnvelopeService _envelopeService; - + + /// + /// Erstellt eine neue Instanz des EnvelopeControllers. + /// + /// Der Logger, der für das Protokollieren von Informationen verwendet wird. + /// Der Dienst, der für die Verarbeitung von Umschlägen zuständig ist. public EnvelopeController(ILogger logger, IEnvelopeService envelopeService) { _logger = logger; _envelopeService = envelopeService; } + /// + /// Ruft eine Liste von Umschlägen basierend auf dem Benutzer und den angegebenen Statusfiltern ab. + /// + /// Die Statusfilter, die für die Abfrage verwendet werden sollen. + /// Eine IActionResult-Instanz, die die abgerufenen Umschläge oder einen Fehlerstatus enthält. [Authorize] [HttpGet] public async Task GetAsync( - [FromQuery] int? min_status = null, - [FromQuery] int? max_status = null, - [FromQuery] params int[] ignore_statuses) + [FromQuery] StatusQuery status) { try { if (User.GetId() is int intId) - return await _envelopeService.ReadByUserAsync(intId, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses).ThenAsync( + return await _envelopeService.ReadByUserAsync(intId, min_status: status.Min, max_status: status.Max, ignore_statuses: status.Ignore).ThenAsync( Success: Ok, Fail: IActionResult (msg, ntc) => { @@ -38,7 +53,7 @@ public class EnvelopeController : ControllerBase }); else { - _logger.LogError("Despite successful authorization, the 'api/envelope' route encountered an issue: the user ID is not recognized as an integer. This may be due to the removal of the ID during the creation of the claims list."); + _logger.LogError("Trotz erfolgreicher Autorisierung wurde die Benutzer-ID nicht als Ganzzahl erkannt. Dies könnte auf eine fehlerhafte Erstellung der Anspruchsliste zurückzuführen sein."); return StatusCode(StatusCodes.Status500InternalServerError); } } @@ -48,4 +63,4 @@ public class EnvelopeController : ControllerBase return StatusCode(StatusCodes.Status500InternalServerError); } } -} \ No newline at end of file +}