using System.Collections.Generic; using System.Linq; using FluentValidation; using FluentValidation.Validators; namespace Readarr.Api.V1.Profiles.Quality { public static class QualityCutoffValidator { public static IRuleBuilderOptions ValidCutoff(this IRuleBuilder ruleBuilder) { return ruleBuilder.SetValidator(new ValidCutoffValidator()); } } public class ValidCutoffValidator : PropertyValidator { protected override string GetDefaultMessageTemplate() => "Cutoff must be an allowed quality or group"; protected override bool IsValid(PropertyValidatorContext context) { var cutoff = (int)context.PropertyValue; dynamic instance = context.ParentContext.InstanceToValidate; var items = instance.Items as IList; var cutoffItem = items?.SingleOrDefault(i => (i.Quality == null && i.Id == cutoff) || i.Quality?.Id == cutoff); return cutoffItem is { Allowed: true }; } } }