diff --git a/src/SwiftLink.Application/Behaviors/ValidationBehavior.cs b/src/SwiftLink.Application/Behaviors/ValidationBehavior.cs
index f22c606..655c170 100644
--- a/src/SwiftLink.Application/Behaviors/ValidationBehavior.cs
+++ b/src/SwiftLink.Application/Behaviors/ValidationBehavior.cs
@@ -1,47 +1,35 @@
-using Azure;
-using FluentValidation;
+using FluentValidation;
using MediatR;
-using System.Net;
+using SwiftLink.Application.Common;
+using SwiftLink.Application.Common.Exceptions;
namespace SwiftLink.Application.Behaviors;
-///
-/// Pipie line for Validation.
-///
-///
-///
-public class ValidationBehavior(IEnumerable> validators)
- : IPipelineBehavior where TRequest : notnull
+public sealed class ValidationBehavior(IEnumerable> validators)
+ : IPipelineBehavior
{
private readonly IEnumerable> _validators = validators;
-
- public async Task Handle(TRequest request, RequestHandlerDelegate next,
- CancellationToken ct = default)
+ public async Task Handle(
+ TRequest request,
+ RequestHandlerDelegate next,
+ CancellationToken cancellationToken)
{
- if (!_validators.Any())
- return await next();
-
- var validationContext = new ValidationContext(request);
-
- var validationResults = await Task.WhenAll(_validators.Select(v => v.ValidateAsync(validationContext, ct)));
+ var context = new ValidationContext(request);
- var errorList = validationResults.Where(r => r.Errors.Count != 0)
- .SelectMany(x => x.Errors)
- .ToList();
+ var validationFailures = await Task.WhenAll(_validators.Select(validator => validator.ValidateAsync(context)));
- if (errorList.Count > 0)
- {
- var message = string.Join(" | ", errorList.Select(e => e.ErrorMessage));
+ var errors = validationFailures
+ .Where(validationResult => !validationResult.IsValid)
+ .SelectMany(validationResult => validationResult.Errors)
+ .Select(validationFailure => new ValidationError(
+ validationFailure.PropertyName,
+ validationFailure.ErrorMessage))
+ .ToList();
- if (Enum.TryParse(errorList.First().ErrorCode, out HttpStatusCode statusCode))
- return GenerateResponse(message, statusCode);
+ if (errors.Count != 0)
+ throw new BusinessValidationException(errors);
- return GenerateResponse(message);
- }
-
- return await next();
+ var response = await next();
+ return response;
}
-
- private static TResult GenerateResponse(string message, HttpStatusCode statusCode = HttpStatusCode.BadRequest)
- => (TResult)Activator.CreateInstance(typeof(Result