using Microsoft.AspNetCore.Http;
namespace MS.Microservice.AspNetCore;
/// Maps stable application error codes to public HTTP responses.
public static class ApplicationErrorResults
{
public static IResult ToProblem(string code, string message, IReadOnlyList? details = null)
{
ArgumentException.ThrowIfNullOrWhiteSpace(code);
ArgumentNullException.ThrowIfNull(message);
var status = code switch
{
"validation" => StatusCodes.Status400BadRequest,
"unauthorized" => StatusCodes.Status401Unauthorized,
"not_found" => StatusCodes.Status404NotFound,
"conflict" => StatusCodes.Status409Conflict,
_ => StatusCodes.Status500InternalServerError
};
var publicError = status < 500;
var extensions = new Dictionary
{
["code"] = publicError ? code : "unexpected"
};
if (publicError && details is { Count: > 0 })
extensions["details"] = details.ToArray();
return Results.Problem(
statusCode: status,
title: publicError ? message : "An unexpected error occurred.",
extensions: extensions);
}
}