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 { public PrimaryTypeValidator() : base("Must have at least one allowed primary type") { } protected override bool IsValid(PropertyValidatorContext context) { var list = context.PropertyValue as IList; if (list == null) { return false; } if (!list.Any(c => c.Allowed)) { return false; } return true; } } public class SecondaryTypeValidator : PropertyValidator { public SecondaryTypeValidator() : base("Must have at least one allowed secondary type") { } protected override bool IsValid(PropertyValidatorContext context) { var list = context.PropertyValue as IList; if (list == null) { return false; } if (!list.Any(c => c.Allowed)) { return false; } return true; } } public class ReleaseStatusValidator : PropertyValidator { public ReleaseStatusValidator() : base("Must have at least one allowed release status") { } protected override bool IsValid(PropertyValidatorContext context) { var list = context.PropertyValue as IList; if (list == null) { return false; } if (!list.Any(c => c.Allowed)) { return false; } return true; } } }