using System.Net; using System.Text.Json; using AiDevProject.Core.Exceptions; namespace AiDevProject.Api.Middleware; /// /// Global error handling middleware. /// public class ErrorHandlingMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public ErrorHandlingMiddleware(RequestDelegate next, ILogger logger) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (AppException ex) when (ex.IsOperational) { _logger.LogWarning("Operational error: {Message}", ex.Message); await HandleExceptionAsync(context, ex.StatusCode, ex.Message); } catch (Exception ex) { _logger.LogError(ex, "Unexpected error: {Message}", ex.Message); await HandleExceptionAsync(context, 500, "Internal server error"); } } private static async Task HandleExceptionAsync(HttpContext context, int statusCode, string message) { context.Response.StatusCode = statusCode; context.Response.ContentType = "application/json"; var response = new { status = "error", message }; await context.Response.WriteAsync(JsonSerializer.Serialize(response)); } }