Вытащил солюшен на уровень выше, чтобы прощё было дотнетить
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2025-10-05 14:32:06 +03:00
parent fa87a56ad1
commit aae4b28089
242 changed files with 159 additions and 159 deletions

View File

@@ -0,0 +1,72 @@
using ApplicationLayer.GeneralExceptions;
using ApplicationLayer.Services.AuthServices.LoginService.Exceptions;
using ApplicationLayer.Services.VisaApplications.Exceptions;
using FluentValidation;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace SchengenVisaApi.ExceptionFilters;
/// Handles <see cref="ApiException"/>
public class GlobalExceptionsFilter : IAsyncExceptionFilter
{
/// <inheritdoc cref="IExceptionFilter.OnException"/>
public async Task OnExceptionAsync(ExceptionContext context)
{
var exception = context.Exception;
var problemDetails = new ProblemDetails();
switch (exception)
{
case ValidationException validationException:
problemDetails.Extensions.Add("errors", validationException.Errors.Select(e => e.ErrorMessage));
problemDetails.Detail = "Validation errors occured";
problemDetails.Status = StatusCodes.Status400BadRequest;
problemDetails.Title = "Bad request";
problemDetails.Type = "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.1";
break;
case ApiException:
problemDetails.Detail = exception.Message;
switch (exception)
{
case EntityNotFoundException:
problemDetails.Status = StatusCodes.Status404NotFound;
problemDetails.Title = "Requested entity not found";
problemDetails.Type = "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.4";
break;
case IncorrectLoginDataException:
problemDetails.Status = StatusCodes.Status403Forbidden;
problemDetails.Title = "Auth failed";
problemDetails.Type = "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.3";
break;
case AlreadyExistsException:
problemDetails.Status = StatusCodes.Status409Conflict;
problemDetails.Title = "Already exists";
problemDetails.Type = "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.8";
break;
case ApplicationAlreadyProcessedException:
problemDetails.Status = StatusCodes.Status409Conflict;
problemDetails.Title = "Already processed";
problemDetails.Type = "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.8";
break;
default:
problemDetails.Status = StatusCodes.Status400BadRequest;
problemDetails.Title = "Bad request";
problemDetails.Type = "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.1";
break;
}
break;
default:
problemDetails.Status = StatusCodes.Status500InternalServerError;
problemDetails.Title = "An unhandled error occured";
problemDetails.Type = "https://datatracker.ietf.org/doc/html/rfc7231#section-6.6.1";
Console.WriteLine($"Error!!!: {exception.Message}");
break;
}
await Results.Problem(problemDetails).ExecuteAsync(context.HttpContext);
context.ExceptionHandled = true;
}
}