using FluentValidation; using MediatR; namespace ReC.Application.Common.Behaviors; public class ValidationBehavior(IEnumerable> validators) : IPipelineBehavior where TRequest : notnull { public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancel) { if (validators.Any()) { var context = new ValidationContext(request); var validationResults = await Task.WhenAll( validators.Select(v => v.ValidateAsync(context, cancel))); var failures = validationResults .SelectMany(r => r.Errors) .Where(f => f != null) .ToList(); if (failures.Count != 0) throw new ValidationException(failures); } return await next(cancel); } }