diff --git a/src/Coderynx.Functional.WebApi/ResultExtensions.cs b/src/Coderynx.Functional.WebApi/ResultExtensions.cs index 2d03b86..d464a97 100644 --- a/src/Coderynx.Functional.WebApi/ResultExtensions.cs +++ b/src/Coderynx.Functional.WebApi/ResultExtensions.cs @@ -18,7 +18,9 @@ public static class ResultExtensions /// An IResult representing the appropriate HTTP response based on the Result state. public static IResult ToHttpResult(this Result result) { - return ToHttpResultInternal(result, null); + return result.IsFailure ? + result.ToHttpErrorResult() : + ToHttpSuccessResult(result, null); } /// @@ -29,9 +31,17 @@ public static IResult ToHttpResult(this Result result) /// An IResult representing the appropriate HTTP response based on the Result state. public static IResult ToHttpResult(this Result result) { - return result.Success.Value is not null - ? ToHttpResultInternal(result, result.Value) - : ToHttpResultInternal(result, null); + if (result.IsFailure) + { + return result.ToHttpErrorResult(); + } + + if (result.Success.Value is null) + { + return ToHttpSuccessResult(result, null); + } + + return ToHttpSuccessResult(result, result.Value); } /// @@ -43,45 +53,34 @@ public static IResult ToHttpResult(this Result result) /// An IResult representing the appropriate HTTP response based on the Result state. public static IResult ToHttpResult(this Result result, Func transform) { + if (result.IsFailure) + { + return result.ToHttpErrorResult(); + } + if (result.Success.Value is null) { - return ToHttpResultInternal(result, null); + return ToHttpSuccessResult(result, null); } var transformerResult = transform(result.Value); - return ToHttpResultInternal(result, transformerResult); + return ToHttpSuccessResult(result, transformerResult); } - /// - /// Internal helper method to convert a Result to an HTTP response. - /// - /// The Result to convert. - /// The value to include in the response (if applicable). - /// An appropriate IResult based on the Result's Success or Error state. - private static IResult ToHttpResultInternal(Result result, object? value) + private static IResult ToHttpSuccessResult(Result result, object? value) { - if (result.IsSuccess) + return result.Success.Kind switch { - return result.Success.Kind switch - { - SuccessKind.Created => Microsoft.AspNetCore.Http.Results.Ok(value), - SuccessKind.Updated => Microsoft.AspNetCore.Http.Results.NoContent(), - SuccessKind.Deleted => Microsoft.AspNetCore.Http.Results.NoContent(), - SuccessKind.Found => Microsoft.AspNetCore.Http.Results.Ok(value), - SuccessKind.Accepted => Microsoft.AspNetCore.Http.Results.Accepted(), - _ => Microsoft.AspNetCore.Http.Results.Ok() - }; - } - - return result.ToProblem(); + SuccessKind.Created => Microsoft.AspNetCore.Http.Results.Ok(value), + SuccessKind.Updated => Microsoft.AspNetCore.Http.Results.NoContent(), + SuccessKind.Deleted => Microsoft.AspNetCore.Http.Results.NoContent(), + SuccessKind.Found => Microsoft.AspNetCore.Http.Results.Ok(value), + SuccessKind.Accepted => Microsoft.AspNetCore.Http.Results.Accepted(), + _ => Microsoft.AspNetCore.Http.Results.Ok() + }; } - /// - /// Converts a failed Result to a ProblemDetails HTTP response. - /// - /// The Result containing an error. - /// An IResult representing a problem details response based on the error information. - private static IResult ToProblem(this Result result) + private static IResult ToHttpErrorResult(this Result result) { var details = new ProblemDetails { diff --git a/src/Coderynx.Functional.WebApi/version.json b/src/Coderynx.Functional.WebApi/version.json index f10c8be..e507d8e 100644 --- a/src/Coderynx.Functional.WebApi/version.json +++ b/src/Coderynx.Functional.WebApi/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json", - "version": "1.4.3", + "version": "1.4.4", "publicReleaseRefSpec": [ "^refs/heads/main$" ],