diff --git a/EnvelopeGenerator.Application/Model/EnvelopeReceiverQuery.cs b/EnvelopeGenerator.Application/Model/EnvelopeReceiverQuery.cs new file mode 100644 index 00000000..11cc38da --- /dev/null +++ b/EnvelopeGenerator.Application/Model/EnvelopeReceiverQuery.cs @@ -0,0 +1,58 @@ +using DigitalData.Core.Exceptions; +using EnvelopeGenerator.Extensions; + +namespace EnvelopeGenerator.Application.Model; + +/// +/// +/// +public record EnvelopeReceiverQuery : EnvelopeReceiverQuery; + +/// +/// +/// +/// +/// +public record EnvelopeReceiverQuery + where TEnvelopeQuery : EnvelopeQuery, new() + where TReceiverQuery : ReceiverQuery, new() +{ + /// + /// + /// + public virtual 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 TEnvelopeQuery() + { + Uuid = EnvelopeUuid + }; + Receiver = new TReceiverQuery() + { + Signature = ReceiverSignature + }; + } + } + + /// + /// + /// + public virtual TEnvelopeQuery? Envelope { get; init; } + + /// + /// + /// + public virtual TReceiverQuery? Receiver { get; init; } +} \ No newline at end of file