using EnvelopeGenerator.Application.Common.Dto; using EnvelopeGenerator.Application.Common.Interfaces.SQLExecutor; using MediatR; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; namespace EnvelopeGenerator.Application.Envelopes.Commands; /// /// Befehl zur Erstellung eines Umschlags. /// public record CreateEnvelopeCommand : IRequest { /// /// Optionale Umschlag-ID fuer Aktualisierungsvorgaenge. /// public int? EnvelopeId { get; init; } /// /// Kennung des ausgewaehlten Umschlagtyps (Vorlage). /// public int? EnvelopeTypeId { get; set; } /// /// Sprachcode fuer Umschlaginhalt und Benachrichtigungen. /// public string? Language { get; set; } /// /// Gibt an, ob der Zugriffscode fuer Empfaenger aktiviert ist. /// public bool? UseAccessCode { get; set; } /// /// Zertifizierungstyp fuer den Signaturprozess. /// public int? CertificationType { get; set; } /// /// Finale E-Mail-Einstellung fuer den Ersteller. /// public int? FinalEmailToCreator { get; set; } /// /// Finale E-Mail-Einstellung fuer die Empfaenger. /// public int? FinalEmailToReceivers { get; set; } /// /// Gibt an, ob Erinnerungs-E-Mails aktiviert sind. /// public bool? SendReminderEmails { get; set; } /// /// Anzahl der Tage bis zur ersten Erinnerung. /// public int? FirstReminderDays { get; set; } /// /// Intervall in Tagen zwischen Erinnerungs-E-Mails. /// public int? ReminderIntervalDays { get; set; } /// /// Anzahl der Tage bis zum Ablauf des Umschlags. /// public int? ExpiresWhenDays { get; set; } /// /// Anzahl der Tage vor Ablauf, ab denen gewarnt wird. /// public int? ExpiresWarningWhenDays { get; set; } /// /// Der Titel des Umschlags. Dies ist ein Pflichtfeld. /// public string? Title { get; set; } /// /// Die Nachricht, die im Umschlag enthalten sein soll. Dies ist ein Pflichtfeld. /// public string? Message { get; set; } /// /// Gibt an, ob die Zwei-Faktor-Authentifizierung für den Umschlag aktiviert ist. Standardmäßig false. /// public bool TFAEnabled { get; set; } = false; /// /// Gibt an, ob der Umschlag nach dem Speichern sofort versendet werden soll. /// public bool Send { get; init; } /// /// Optionaler PDF-Dokumentinhalt als Base64. /// public CreateEnvelopeDocumentDto? Document { get; init; } /// /// Empfaengerliste inklusive optionaler Signaturfeld-Koordinaten. /// public List Receivers { get; init; } = new(); /// /// ID des Absenders /// internal int UserId { get; private set; } /// /// /// /// /// public CreateEnvelopeCommand WithAuth(int userId) { UserId = userId; return this; } /// /// Determines which component is used for envelope processing. /// When true, processing is delegated to ; /// when false, is used instead. /// Note: should only be used in testing scenarios. /// [JsonIgnore] [NotMapped] public bool UseSQLExecutor { get; set; } = true; } public record CreateEnvelopeDocumentDto(string DataAsBase64); public record CreateEnvelopeFieldDto(double X, double Y, int Page); public record CreateEnvelopeReceiverDto( string EmailAddress, string? Name, string? PhoneNumber, List Fields);