using EnvelopeGenerator.Application.Dto.EnvelopeReceiver; using EnvelopeGenerator.Application.Envelopes.Queries; using EnvelopeGenerator.Application.Exceptions; using EnvelopeGenerator.Application.Extensions; using EnvelopeGenerator.Application.Receivers.Queries; using EnvelopeGenerator.Extensions; using MediatR; namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries; /// /// Repräsentiert eine Abfrage zum Lesen eines Envelope-Empfängers. /// Invalid (0): Ungültiger Include. /// 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. /// /// /// Diese Abfrage kombiniert Informationen über einen Umschlag () /// und einen Empfänger (), um eine vollständige Antwort /// () zu generieren. /// Die Antwort enthält Details wie den Include, die Zuordnung zwischen Umschlag und Empfänger /// sowie zusätzliche Metadaten. /// public record ReadEnvelopeReceiverQuery : IRequest> { /// /// /// public string? Key { get => Envelope?.Uuid is string uuid && Receiver?.Signature is string signature ? (uuid, signature).EncodeEnvelopeReceiverId() : null; init { if (value is null) return; (string? EnvelopeUuid, string? ReceiverSignature) = value.DecodeEnvelopeReceiverId(); if(string.IsNullOrEmpty(EnvelopeUuid) || string.IsNullOrEmpty(ReceiverSignature)) { throw new BadRequestException("Der EnvelopeReceiverKey muss ein gültiger Base64-kodierter String sein, der die EnvelopeUuid und die ReceiverSignature enthält."); } Envelope = new ReadEnvelopeQuery() { Uuid = EnvelopeUuid }; Receiver = new ReadReceiverQuery() { Signature = ReceiverSignature }; } } /// /// Der Umschlag, der mit dem Empfänger verknüpft ist. /// public ReadEnvelopeQuery? Envelope { get; set; } /// /// Der Empfänger, der mit dem Umschlag verknüpft ist. /// public ReadReceiverQuery? Receiver { get; set; } }; /// /// /// public static class Extensions { /// /// /// /// /// /// /// public static Task ReadEnvelopeReceiverAsync(this IMediator mediator, string key, CancellationToken cancel = default) { var q = new ReadEnvelopeReceiverQuery() { Key = key }; return mediator.Send(q, cancel).Then(envRcvs => envRcvs.FirstOrDefault()); } }