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