Files
vegasco/src/Vegasco.Server.Api/Common/FluentValidationOptions.cs

37 lines
979 B
C#
Raw Normal View History

2024-08-17 16:38:40 +02:00
using FluentValidation;
using FluentValidation.Results;
2024-08-17 16:38:40 +02:00
using Microsoft.Extensions.Options;
namespace Vegasco.Server.Api.Common;
2024-08-17 16:38:40 +02:00
public class FluentValidationOptions<TOptions> : IValidateOptions<TOptions>
where TOptions : class
{
private readonly IEnumerable<IValidator<TOptions>> _validators;
public string? Name { get; set; }
public FluentValidationOptions(string? name, IEnumerable<IValidator<TOptions>> validators)
{
Name = name;
_validators = validators;
}
public ValidateOptionsResult Validate(string? name, TOptions options)
{
if (name is not null && name != Name)
{
return ValidateOptionsResult.Skip;
}
ArgumentNullException.ThrowIfNull(options);
List<ValidationResult> failedValidations = _validators.ValidateAllAsync(options).Result;
2024-08-17 16:38:40 +02:00
if (failedValidations.Count == 0)
{
return ValidateOptionsResult.Success;
}
return ValidateOptionsResult.Fail(failedValidations.SelectMany(x => x.Errors.Select(x => x.ErrorMessage)));
}
}