You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
recyclarr/src/Recyclarr.TrashLib/Config/Services/ServiceConfigurationValidat...

59 lines
2.0 KiB

using FluentValidation;
using JetBrains.Annotations;
using Recyclarr.Common.FluentValidation;
using Recyclarr.TrashLib.Services.Radarr.Config;
using Recyclarr.TrashLib.Services.Sonarr.Config;
namespace Recyclarr.TrashLib.Config.Services;
[UsedImplicitly]
internal class ServiceConfigurationValidator : AbstractValidator<ServiceConfiguration>
{
public ServiceConfigurationValidator(
IValidator<SonarrConfiguration> sonarrValidator,
IValidator<RadarrConfiguration> radarrValidator)
{
ClassLevelCascadeMode = CascadeMode.Stop;
RuleFor(x => x.BaseUrl).NotEmpty().WithMessage("Property 'base_url' is required");
RuleFor(x => x.ApiKey).NotEmpty().WithMessage("Property 'api_key' is required");
RuleForEach(x => x.CustomFormats).SetValidator(new CustomFormatConfigValidator());
RuleFor(x => x.QualityDefinition).SetNonNullableValidator(new QualityDefinitionConfigValidator());
RuleFor(x => x).SetInheritanceValidator(x =>
{
x.Add(sonarrValidator);
x.Add(radarrValidator);
});
}
}
[UsedImplicitly]
internal class CustomFormatConfigValidator : AbstractValidator<CustomFormatConfig>
{
public CustomFormatConfigValidator()
{
RuleFor(x => x.TrashIds).NotEmpty()
.WithMessage("'custom_formats' elements must contain at least one element under 'trash_ids'");
RuleForEach(x => x.QualityProfiles).SetValidator(new QualityProfileScoreConfigValidator());
}
}
[UsedImplicitly]
internal class QualityProfileScoreConfigValidator : AbstractValidator<QualityProfileScoreConfig>
{
public QualityProfileScoreConfigValidator()
{
RuleFor(x => x.Name).NotEmpty().WithMessage("'name' is required for elements under 'quality_profiles'");
}
}
[UsedImplicitly]
internal class QualityDefinitionConfigValidator : AbstractValidator<QualityDefinitionConfig>
{
public QualityDefinitionConfigValidator()
{
RuleFor(x => x.Type).NotEmpty().WithMessage("'type' is required for 'quality_definition'");
}
}