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(this Result result) { if (result.IsFailed) return result.Errors[0].ToActionResult(); var warnings = result.Reasons.OfType().Select(w => w.Message).ToList(); return new OkObjectResult(new ApiResponse(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 } }; }