using Common.FluentValidation; using FluentValidation; using JetBrains.Annotations; namespace TrashLib.Services.Radarr.Config; [UsedImplicitly] internal class RadarrConfigurationValidator : AbstractValidator { public RadarrConfigurationValidator( IRadarrValidationMessages messages, IValidator qualityDefinitionConfigValidator, IValidator customFormatConfigValidator) { RuleFor(x => x.BaseUrl).NotEmpty().WithMessage(messages.BaseUrl); RuleFor(x => x.ApiKey).NotEmpty().WithMessage(messages.ApiKey); RuleFor(x => x.QualityDefinition).SetNonNullableValidator(qualityDefinitionConfigValidator); RuleForEach(x => x.CustomFormats).SetValidator(customFormatConfigValidator); } } [UsedImplicitly] internal class CustomFormatConfigValidator : AbstractValidator { public CustomFormatConfigValidator( IRadarrValidationMessages messages, IValidator qualityProfileConfigValidator) { RuleFor(x => x.Names).NotEmpty().When(x => x.TrashIds.Count == 0) .WithMessage(messages.CustomFormatNamesAndIds); RuleForEach(x => x.QualityProfiles).SetValidator(qualityProfileConfigValidator); } } [UsedImplicitly] internal class QualityProfileConfigValidator : AbstractValidator { public QualityProfileConfigValidator(IRadarrValidationMessages messages) { RuleFor(x => x.Name).NotEmpty().WithMessage(messages.QualityProfileName); } } [UsedImplicitly] internal class QualityDefinitionConfigValidator : AbstractValidator { public QualityDefinitionConfigValidator(IRadarrValidationMessages messages) { RuleFor(x => x.Type).NotEmpty().WithMessage(messages.QualityDefinitionType); } }