Payload.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace Libs;
  3. use React\Http\Message\Response;
  4. /**
  5. * Formato padrão de resposta da API.
  6. *
  7. * Toda resposta enviada ao frontend deve seguir esta estrutura:
  8. *
  9. * {
  10. * "status": "ok" | "failed",
  11. * "code": "S_OK" | "E_VALIDATE" | ...,
  12. * "message": "mensagem legível",
  13. * "data": { ... } // presente apenas quando houver dados
  14. * }
  15. *
  16. * Qualquer informação adicional retornada ao frontend deve ficar sempre dentro de "data".
  17. */
  18. final class Payload
  19. {
  20. /**
  21. * Monta o array padrão de resposta. "data" só é incluído quando não está vazio.
  22. */
  23. public static function build(string $status, string $code, string $message, $data = []): array
  24. {
  25. $response = [
  26. 'status' => $status,
  27. 'code' => $code,
  28. 'message' => $message,
  29. ];
  30. if (!empty($data)) {
  31. $response['data'] = $data;
  32. }
  33. return $response;
  34. }
  35. /**
  36. * Monta a resposta padrão já como Response JSON pronta para retorno no controller.
  37. */
  38. public static function json(string $status, string $code, string $message, $data = [], int $httpStatus = 200): Response
  39. {
  40. return Response::json(self::build($status, $code, $message, $data))->withStatus($httpStatus);
  41. }
  42. public static function ok($data = [], string $code = 'S_OK', string $message = 'Request ok.'): Response
  43. {
  44. return self::json('ok', $code, $message, $data);
  45. }
  46. public static function fail(string $message, $data = [], string $code = 'E_GENERIC', int $httpStatus = 400): Response
  47. {
  48. return self::json('failed', $code, $message, $data, $httpStatus);
  49. }
  50. }