SearchMetadataResponse.php 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace Webkul\BagistoApi\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\JsonResponse;
  5. use Illuminate\Http\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. /**
  8. * Adds effective Elasticsearch search details to collection responses.
  9. */
  10. class SearchMetadataResponse
  11. {
  12. public function handle(Request $request, Closure $next): Response
  13. {
  14. $response = $next($request);
  15. $metadata = $request->attributes->get('bagistoapi.search_metadata');
  16. if (! is_array($metadata) || ! $response instanceof JsonResponse) {
  17. return $response;
  18. }
  19. $payload = $response->getData(true);
  20. if ($this->isGraphQlRequest($request)) {
  21. $payload['extensions']['searchMetadata'] = $metadata;
  22. } else {
  23. $payload['meta']['searchMetadata'] = $metadata;
  24. }
  25. $response->setData($payload);
  26. return $response;
  27. }
  28. private function isGraphQlRequest(Request $request): bool
  29. {
  30. return $request->is('api/graphql', 'graphql');
  31. }
  32. }