34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
using FluentResults;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Tnsu.ApprovalRoute.Application.Common.Errors;
|
|
|
|
namespace Tnsu.ApprovalRoute.Api.Common;
|
|
|
|
public static class ResultExtensions
|
|
{
|
|
public static IActionResult ToActionResult<T>(this Result<T> result)
|
|
{
|
|
if (result.IsFailed)
|
|
return result.Errors[0].ToActionResult();
|
|
|
|
var warnings = result.Reasons.OfType<Warning>().Select(w => w.Message).ToList();
|
|
return new OkObjectResult(new ApiResponse<T>(result.Value, warnings));
|
|
}
|
|
|
|
public static IActionResult ToActionResult(this Result result)
|
|
{
|
|
if (result.IsFailed)
|
|
return result.Errors[0].ToActionResult();
|
|
|
|
return new NoContentResult();
|
|
}
|
|
|
|
private static IActionResult ToActionResult(this IError error) => error switch
|
|
{
|
|
NotFoundError => new NotFoundObjectResult(new ApiError(error.Message)),
|
|
ValidationError => new BadRequestObjectResult(new ApiError(error.Message)),
|
|
ConflictError => new ConflictObjectResult(new ApiError(error.Message)),
|
|
_ => new ObjectResult(new ApiError(error.Message)) { StatusCode = StatusCodes.Status500InternalServerError }
|
|
};
|
|
}
|