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 Microsoft.IdentityModel.Tokens; using static EnvelopeGenerator.Common.Constants; namespace EnvelopeGenerator.GeneratorAPI.Controllers; /// /// Dieser Controller stellt Endpunkte für den Zugriff auf die Umschlaghistorie bereit. /// [Route("api/[controller]")] [ApiController] [Authorize] public class HistoryController : ControllerBase { private readonly ILogger _logger; private readonly IEnvelopeHistoryService _service; private readonly IMemoryCache _memoryCache; /// /// Konstruktor für den HistoryController. /// /// Der Logger, der für das Protokollieren von Informationen verwendet wird. /// Der Dienst, der für die Verarbeitung der Umschlaghistorie verantwortlich ist. public HistoryController(ILogger logger, IEnvelopeHistoryService service, IMemoryCache memoryCache) { _logger = logger; _service = service; _memoryCache = memoryCache; } /// /// 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. /// /// /// [HttpGet("related")] [Authorize] public IActionResult GetReferenceTypes(ReferenceType? referenceType = null) { return referenceType is null ? Ok(_memoryCache.GetEnumAsDictionary()) : Ok(referenceType.ToString()); } /// /// 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 /// /// /// 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. /// /// Gibt die HTTP-Antwort zurück. /// [HttpGet("status")] [Authorize] public IActionResult GetEnvelopeStatus([FromQuery] EnvelopeStatus? status = null) { return status is null ? Ok(_memoryCache.GetEnumAsDictionary()) : Ok(status.ToString()); } /// /// Ruft die gesamte Umschlaghistorie basierend auf den angegebenen Abfrageparametern ab. /// /// Die Abfrageparameter, die die Filterkriterien für die Umschlaghistorie definieren. /// Eine Liste von Historieneinträgen, die den angegebenen Kriterien entsprechen, oder nur der letzte Eintrag. /// Die Anfrage war erfolgreich, und die Umschlaghistorie wird zurückgegeben. /// Die Anfrage war ungültig oder unvollständig. /// Der Benutzer ist nicht authentifiziert. /// Der Benutzer hat keine Berechtigung, auf die Ressource zuzugreifen. /// Ein unerwarteter Fehler ist aufgetreten. [HttpGet] [Authorize] public async Task 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); } }