Payload.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. }