using FluentValidation; using ValidationException = Netina.Common.Models.Exception.ValidationException; namespace Netina.Repository.Behaviors; public class ValidationBehavior(IEnumerable> validators) : IPipelineBehavior where TRequest : notnull { public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) { var context = new ValidationContext(request); List errors = new List(); foreach (IValidator validator in validators) { var result = await validator.ValidateAsync(context, cancellationToken); if (!result.IsValid) errors.AddRange(result.Errors.Select(v => new ValidationError(v.PropertyName, v.ErrorMessage)).Distinct()); } if (errors.Any()) { throw new ValidationException(errors); } var response = await next(); return response; } }