This commit is contained in:
2026-03-15 11:22:01 +01:00
commit 599ecd66a5
109 changed files with 3348 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
using FluentValidation;
using FluentValidation.Results;
using Mccn.Common.Application.Exceptions;
using Mccn.Common.Domain.Abstractions;
using MediatR;
using ValidationException = Mccn.Common.Application.Exceptions.ValidationException;
namespace Mccn.Common.Application.Behaviors;
public sealed class ValidationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
where TRequest : IBaseRequest
where TResponse : Result
{
private readonly IEnumerable<IValidator<TRequest>> _validators;
public ValidationBehavior(IEnumerable<IValidator<TRequest>> validators)
{
_validators = validators;
}
public async Task<TResponse> Handle(
TRequest request,
RequestHandlerDelegate<TResponse> next,
CancellationToken cancellationToken)
{
ValidationContext<TRequest> context = new(request);
ValidationResult[] validationFailures = await Task.WhenAll(
_validators.Select(v => v.ValidateAsync(context, cancellationToken)));
List<ValidationError> errors = validationFailures
.Where(r => !r.IsValid)
.SelectMany(r => r.Errors)
.Select(f => new ValidationError(f.PropertyName, f.ErrorMessage))
.ToList();
if (errors.Count != 0) throw new ValidationException(errors);
return await next();
}
}