using FluentValidation; namespace DocumentOperator.Application.ValidatePdfA.Validators; /// /// Validator for ValidatePdfAQuery /// Ensures exactly ONE input format is provided (PdfBytes XOR Base64Pdf) /// public class ValidatePdfAQueryValidator : AbstractValidator { public ValidatePdfAQueryValidator() { RuleFor(x => x) .Must(x => (x.PdfBytes != null && x.PdfBytes.Length > 0) ^ !string.IsNullOrWhiteSpace(x.Base64Pdf)) .WithMessage("Either PdfBytes or Base64Pdf must be provided, but not both"); When(x => !string.IsNullOrWhiteSpace(x.Base64Pdf), () => { RuleFor(x => x.Base64Pdf!) .Must(BeValidBase64) .WithMessage("Base64Pdf must be a valid Base64 string"); }); When(x => x.PdfBytes != null, () => { RuleFor(x => x.PdfBytes!) .Must(bytes => bytes.Length > 0) .WithMessage("PdfBytes cannot be empty"); }); } private static bool BeValidBase64(string base64) { if (string.IsNullOrWhiteSpace(base64)) return false; try { Convert.FromBase64String(base64); return true; } catch (FormatException) { return false; } } }