using System.Collections.Generic; using System.Linq; using FluentValidation; using FluentValidation.Validators; namespace Lidarr.Api.V1.Profiles.Metadata { public static class MetadataValidation { public static IRuleBuilderOptions> MustHaveAllowedPrimaryType(this IRuleBuilder> ruleBuilder) { ruleBuilder.SetValidator(new NotEmptyValidator(null)); return ruleBuilder.SetValidator(new PrimaryTypeValidator()); } public static IRuleBuilderOptions> MustHaveAllowedSecondaryType(this IRuleBuilder> ruleBuilder) { ruleBuilder.SetValidator(new NotEmptyValidator(null)); return ruleBuilder.SetValidator(new SecondaryTypeValidator()); } public static IRuleBuilderOptions> MustHaveAllowedReleaseStatus(this IRuleBuilder> ruleBuilder) { ruleBuilder.SetValidator(new NotEmptyValidator(null)); return ruleBuilder.SetValidator(new ReleaseStatusValidator()); } } public class PrimaryTypeValidator : PropertyValidator { protected override string GetDefaultMessageTemplate() => "Must have at least one allowed primary type"; protected override bool IsValid(PropertyValidatorContext context) { return context.PropertyValue is IList list && list.Any(c => c.Allowed); } } public class SecondaryTypeValidator : PropertyValidator { protected override string GetDefaultMessageTemplate() => "Must have at least one allowed secondary type"; protected override bool IsValid(PropertyValidatorContext context) { return context.PropertyValue is IList list && list.Any(c => c.Allowed); } } public class ReleaseStatusValidator : PropertyValidator { protected override string GetDefaultMessageTemplate() => "Must have at least one allowed release status"; protected override bool IsValid(PropertyValidatorContext context) { return context.PropertyValue is IList list && list.Any(c => c.Allowed); } } }