CustomResults.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using SharedKernel.Results;
  2. namespace Web.Api.Common;
  3. public static class CustomResults
  4. {
  5. public static IResult Problem(Result result)
  6. {
  7. if (result.IsSuccess)
  8. {
  9. throw new InvalidOperationException();
  10. }
  11. var statusCode = GetStatusCode(result.Error.Type);
  12. if (result.Error is ValidationError validationError)
  13. {
  14. return ApiResponse.Fail(
  15. statusCode,
  16. result.Error.Description,
  17. validationError.Errors.Select(e => new
  18. {
  19. code = e.Code,
  20. description = e.Description
  21. })
  22. );
  23. }
  24. return ApiResponse.Fail(statusCode, result.Error.Description);
  25. }
  26. private static int GetStatusCode(ErrorType errorType) => errorType switch
  27. {
  28. ErrorType.Validation or ErrorType.Problem => StatusCodes.Status400BadRequest,
  29. ErrorType.Unauthorized => StatusCodes.Status401Unauthorized,
  30. ErrorType.NotFound => StatusCodes.Status404NotFound,
  31. ErrorType.Forbidden => StatusCodes.Status403Forbidden,
  32. ErrorType.Conflict => StatusCodes.Status409Conflict,
  33. ErrorType.MethodNotAllowed => StatusCodes.Status405MethodNotAllowed,
  34. _ => StatusCodes.Status500InternalServerError
  35. };
  36. }