< Summary

Information
Class: Despesas.GlobalException.GlobalExceptionMiddleware
Assembly: Despesas.GlobalException
File(s): /src/Despesas.GlobalException/GlobalExceptionMiddlware.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 37
Coverable lines: 37
Total lines: 62
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
InvokeAsync()0%4260%
HandleExceptionAsync()100%210%

File(s)

/src/Despesas.GlobalException/GlobalExceptionMiddlware.cs

#LineLine coverage
 1using Despesas.GlobalException.CustomExceptions.Core;
 2using Microsoft.AspNetCore.Http;
 3using Microsoft.Extensions.Logging;
 4using System.Net;
 5using System.Text.Json;
 6
 7namespace Despesas.GlobalException;
 8
 9public class GlobalExceptionMiddleware
 10{
 11    private readonly RequestDelegate _next;
 12    private readonly ILogger<GlobalExceptionMiddleware> _logger;
 13
 014    public GlobalExceptionMiddleware(RequestDelegate next, ILogger<GlobalExceptionMiddleware> logger)
 015    {
 016        _next = next;
 017        _logger = logger;
 018    }
 19
 20    public async Task InvokeAsync(HttpContext context)
 021    {
 22        try
 023        {
 024            await _next(context);
 025        }
 026        catch (CustomException ex)
 027        {
 028            await HandleExceptionAsync(context, ex.StatusCode, ex.Message);
 029        }
 030        catch (ArgumentException ex)
 031        {
 032            await HandleExceptionAsync(context, (int)HttpStatusCode.BadRequest, ex.Message);
 033        }
 034        catch (Exception ex)
 035        {
 36            // Verifica se é uma exceção do EF Core / repositório
 037            if (!await EfCoreExceptionHandler.HandleAsync(context, ex, _logger))
 038            {
 39                /* Vide Docker && Kurbenetes Qualquer outra exceção inesperada é invocada _logger.LogError(...) dentro d
 40                /e vai para o Console e Debug Output (sem configuração extra... appsettings.json).
 41                */
 042                _logger.LogError(ex, "Erro inesperado");
 043                await HandleExceptionAsync(context, StatusCodes.Status500InternalServerError,
 044                    "Ocorreu um erro inesperado. Tente novamente mais tarde.");
 045            }
 046        }
 047    }
 48
 49    private static async Task HandleExceptionAsync(HttpContext context, int statusCode, string message)
 050    {
 051        context.Response.ContentType = "application/json";
 052        context.Response.StatusCode = statusCode;
 53
 054        var response = new
 055        {
 056            success = false,
 057            error = message
 058        };
 59
 060        await context.Response.WriteAsync(JsonSerializer.Serialize(response));
 061    }
 62}