- Introduced a static readonly field `BaseId` in `MemoryCacheExtensions.cs`. - Refactored `GetEnumAsDictionary<TEnum>` to use expression-bodied syntax and LINQ for improved readability and efficiency. - Removed the import statement for `Microsoft.IdentityModel.Tokens` in `HistoryController.cs`, indicating a potential shift in authentication/authorization handling.
143 lines
6.1 KiB
C#
143 lines
6.1 KiB
C#
using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
|
|
using EnvelopeGenerator.Application.Contracts.Services;
|
|
using EnvelopeGenerator.Application.Histories.Queries.Read;
|
|
using EnvelopeGenerator.Extensions;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
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;
|
|
|
|
private readonly IMemoryCache _memoryCache;
|
|
|
|
/// <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, IMemoryCache memoryCache)
|
|
{
|
|
_logger = logger;
|
|
_service = service;
|
|
_memoryCache = memoryCache;
|
|
}
|
|
|
|
/// <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.
|
|
/// 0 - Receiver:
|
|
/// Historische Datensätze, die sich auf den Status des Absenders beziehen. Sie haben Statuscodes, die mit 1* beginnen.
|
|
/// 1 - Sender:
|
|
/// Historische Datensätze über den Status der Empfänger. Diese haben Statuscodes, die mit 2* beginnen.
|
|
/// 2 - System:
|
|
/// Historische Datensätze, die sich auf den allgemeinen Zustand des Umschlags beziehen. Diese haben Statuscodes, die mit 3* beginnen.
|
|
/// 3 - Unknown:
|
|
/// Ein unbekannter Datensatz weist auf einen möglichen Mangel oder eine Unstimmigkeit im Aktualisierungsprozess der Anwendung hin.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <response code="200"></response>
|
|
[HttpGet("related")]
|
|
[Authorize]
|
|
public IActionResult GetReferenceTypes(ReferenceType? referenceType = null)
|
|
{
|
|
return referenceType is null ? Ok(_memoryCache.GetEnumAsDictionary<ReferenceType>()) : Ok(referenceType.ToString());
|
|
}
|
|
|
|
/// <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.
|
|
/// 0: Invalid
|
|
/// 1001: EnvelopeCreated
|
|
/// 1002: EnvelopeSaved
|
|
/// 1003: EnvelopeQueued
|
|
/// 1004: EnvelopeSent (Nicht verwendet)
|
|
/// 1005: EnvelopePartlySigned
|
|
/// 1006: EnvelopeCompletelySigned
|
|
/// 1007: EnvelopeReportCreated
|
|
/// 1008: EnvelopeArchived
|
|
/// 1009: EnvelopeDeleted
|
|
/// 2001: AccessCodeRequested
|
|
/// 2002: AccessCodeCorrect
|
|
/// 2003: AccessCodeIncorrect
|
|
/// 2004: DocumentOpened
|
|
/// 2005: DocumentSigned
|
|
/// 4001: DocumentForwarded
|
|
/// 2006: SignatureConfirmed
|
|
/// 2007: DocumentRejected
|
|
/// 2008: EnvelopeShared
|
|
/// 2009: EnvelopeViewed
|
|
/// 3001: MessageInvitationSent (Wird von Trigger verwendet)
|
|
/// 3002: MessageAccessCodeSent
|
|
/// 3003: MessageConfirmationSent
|
|
/// 3004: MessageDeletionSent
|
|
/// 3005: MessageCompletionSent
|
|
/// </summary>
|
|
/// <param name="status">
|
|
/// 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] EnvelopeStatus? status = null)
|
|
{
|
|
return status is null ? Ok(_memoryCache.GetEnumAsDictionary<EnvelopeStatus>()) : Ok(status.ToString());
|
|
}
|
|
|
|
/// <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);
|
|
}
|
|
}
|