gatsby_endpoints-8.x-1.0-alpha1/src/Controller/GatsbyEndpointController.php
src/Controller/GatsbyEndpointController.php
<?php
namespace Drupal\gatsby_endpoints\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
/**
* Defines a class for serving Gatsby endpoint routes.
*/
class GatsbyEndpointController extends ControllerBase {
/**
* Drupal\Core\Entity\EntityTypeManagerInterface definition.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Drupal\gatsby_endpoints\GatsbyEndpointGenerator definition.
*
* @var \Drupal\gatsby_endpoints\GatsbyEndpointGenerator
*/
protected $gatsbyEndpointGenerator;
/**
* Config Interface for accessing site configuration.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $jsonApiConfig;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
$instance = parent::create($container);
$config = $container->get('config.factory');
$instance->jsonApiConfig = $config->get('jsonapi_extras.settings');
$instance->entityTypeManager = $container->get('entity_type.manager');
$instance->gatsbyEndpointGenerator = $container->get('gatsby.gatsby_endpoint_generator');
return $instance;
}
/**
* Gatsby Endpoint callback that generates correct JSON output.
*
* @return Symfony\Component\HttpFoundation\JsonResponse
* Returns a JsonResponse with all of the content changes since last fetch.
*/
public function sync(string $endpoint_id, Request $request) {
$sync_data = [
'timestamp' => time(),
];
$base_url = $request->getSchemeAndHttpHost();
$path_prefix = $this->jsonApiConfig->get('path_prefix');
$endpoint = $this->entityTypeManager->getStorage('gatsby_endpoint')->load($endpoint_id);
if ($endpoint) {
$links = $this->gatsbyEndpointGenerator->getEndpointLinks($endpoint);
foreach ($links as $key => $link) {
$sync_data['links'][$key]['href'] = $base_url . '/' . $path_prefix . '/' . $link;
}
}
return new JsonResponse($sync_data);
}
}
