Developer 02 fbd09cb570 Update comments in HistoryController for clarity
Improved descriptions of historical records related to sender, receiver, system, and unknown statuses. Enhanced formatting and provided detailed explanations of associated status codes for better readability.
2025-04-11 23:18:30 +02:00

163 lines
8.2 KiB
C#

using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.Histories.Queries.Read;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.Drawing;
using System.Runtime.ConstrainedExecution;
using static EnvelopeGenerator.Common.Constants;
namespace EnvelopeGenerator.GeneratorAPI.Controllers;
/// <summary>
/// Dieser Controller stellt Endpunkte für den Zugriff auf die Umschlaghistorie bereit.
/// </summary>
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class HistoryController : ControllerBase
{
private readonly ILogger<HistoryController> _logger;
private readonly IEnvelopeHistoryService _service;
/// <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 Umschlaghistorie verantwortlich ist.</param>
public HistoryController(ILogger<HistoryController> logger, IEnvelopeHistoryService service)
{
_logger = logger;
_service = service;
}
/// <summary>
/// Gibt alle möglichen Verweise auf alle möglichen Status in einem Verlaufsdatensatz zurück. (z. B. DocumentSigned bezieht sich auf Receiver.)
/// Dies wird hinzugefügt, damit Client-Anwendungen sich selbst auf dem neuesten Stand halten können.
/// <list type="bullet">
/// <item><description><c>0 - Receiver</c>:
/// Historische Datensätze, die sich auf den Status des Absenders beziehen. Sie haben Statuscodes, die mit 1* beginnen.</description></item>
/// <item><description><c>1 - Sender</c>:
/// Historische Datensätze über den Status der Empfänger. Diese haben Statuscodes, die mit 2* beginnen.</description></item>
/// <item><description><c>2 - System</c>:
/// Historische Datensätze, die sich auf den allgemeinen Zustand des Umschlags beziehen. Diese haben Statuscodes, die mit 3* beginnen.</description></item>
/// <item><description><c>3 - Unknown</c>:
/// Ein unbekannter Datensatz weist auf einen möglichen Mangel oder eine Unstimmigkeit im Aktualisierungsprozess der Anwendung hin.</description></item>
/// </list>
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
[HttpGet("related")]
[Authorize]
public IActionResult GetReferenceTypes()
{
// Enum zu Schlüssel-Wert-Paar
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);
return Ok(referenceTypes);
}
/// <summary>
/// Gibt alle möglichen Status in einem Verlaufsdatensatz zurück.
/// Dies wird hinzugefügt, damit Client-Anwendungen sich selbst auf dem neuesten Stand halten können.
/// <list type="bullet">
/// <item><description><c>0</c>: Invalid</description></item>
/// <item><description><c>1001</c>: EnvelopeCreated</description></item>
/// <item><description><c>1002</c>: EnvelopeSaved</description></item>
/// <item><description><c>1003</c>: EnvelopeQueued</description></item>
/// <item><description><c>1004</c>: EnvelopeSent (Nicht verwendet)</description></item>
/// <item><description><c>1005</c>: EnvelopePartlySigned</description></item>
/// <item><description><c>1006</c>: EnvelopeCompletelySigned</description></item>
/// <item><description><c>1007</c>: EnvelopeReportCreated</description></item>
/// <item><description><c>1008</c>: EnvelopeArchived</description></item>
/// <item><description><c>1009</c>: EnvelopeDeleted</description></item>
/// <item><description><c>2001</c>: AccessCodeRequested</description></item>
/// <item><description><c>2002</c>: AccessCodeCorrect</description></item>
/// <item><description><c>2003</c>: AccessCodeIncorrect</description></item>
/// <item><description><c>2004</c>: DocumentOpened</description></item>
/// <item><description><c>2005</c>: DocumentSigned</description></item>
/// <item><description><c>4001</c>: DocumentForwarded</description></item>
/// <item><description><c>2006</c>: SignatureConfirmed</description></item>
/// <item><description><c>2007</c>: DocumentRejected</description></item>
/// <item><description><c>2008</c>: EnvelopeShared</description></item>
/// <item><description><c>2009</c>: EnvelopeViewed</description></item>
/// <item><description><c>3001</c>: MessageInvitationSent (Wird von Trigger verwendet)</description></item>
/// <item><description><c>3002</c>: MessageAccessCodeSent</description></item>
/// <item><description><c>3003</c>: MessageConfirmationSent</description></item>
/// <item><description><c>3004</c>: MessageDeletionSent</description></item>
/// <item><description><c>3005</c>: MessageCompletionSent</description></item>
/// </list>
/// </summary>
/// <param name="related">
/// Abfrageparameter, der angibt, auf welche Referenz sich der Status bezieht.
/// 0 - Sender: Historische Datensätze, die sich auf den Status des Absenders beziehen. Sie haben Statuscodes, die mit 1* beginnen.
/// 1 - Receiver: Historische Datensätze über den Status der Empfänger. Diese haben Statuscodes, die mit 2* beginnen.
/// 2 - System: Diese werden durch Datenbank-Trigger aktualisiert und sind in den Tabellen EnvelopeHistory und EmailOut zu finden.Sie arbeiten
/// integriert mit der Anwendung EmailProfiler, um E-Mails zu versenden und haben die Codes, die mit 3* beginnen.
/// </param>
/// <returns>Gibt die HTTP-Antwort zurück.</returns>
/// <response code="200"></response>
[HttpGet("status")]
[Authorize]
public IActionResult GetEnvelopeStatus([FromQuery] ReferenceType? related = null)
{
// Enum zu Schlüssel-Wert-Paar
var referenceTypes = Enum.GetValues(typeof(EnvelopeStatus))
.Cast<EnvelopeStatus>()
.ToDictionary(rt =>
{
var key = rt.ToString();
var keyAsCamelCase = char.ToLower(key[0]) + key[1..];
return keyAsCamelCase;
}, rt => (int)rt);
return Ok(referenceTypes);
}
/// <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>
/// <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>
/// <response code="401">Der Benutzer ist nicht authentifiziert.</response>
/// <response code="403">Der Benutzer hat keine Berechtigung, auf die Ressource zuzugreifen.</response>
/// <response code="500">Ein unerwarteter Fehler ist aufgetreten.</response>
[HttpGet]
[Authorize]
public async Task<IActionResult> GetAllAsync([FromQuery] ReadHistoryQuery history)
{
bool withReceiver = false;
bool withSender = false;
switch (history.Related)
{
case ReferenceType.Receiver:
withReceiver = true;
break;
case ReferenceType.Sender:
withSender = true;
break;
}
var histories = await _service.ReadAsync(
envelopeId: history.EnvelopeId,
referenceType: history.Related,
withSender: withSender,
withReceiver: withReceiver);
return Ok(histories);
}
}