vertex_ai_search-1.0.0-beta4/src/Plugin/rest/resource/VertexAISearchResource.php

src/Plugin/rest/resource/VertexAISearchResource.php
<?php

namespace Drupal\vertex_ai_search\Plugin\rest\resource;

use Drupal\Component\Plugin\PluginManagerInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\search\Entity\SearchPage;
use Drupal\rest\ResourceResponse;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\vertex_ai_search\Service\VertexSearchManagerInterface;
use Drupal\vertex_ai_search\VertexSearchFilterPluginManager;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;

/**
 * Represents search page results as resources.
 *
 * @RestResource(
 *   id = "vertex_ai_search_results",
 *   label = @Translation("Vertex AI Search Rest Resource"),
 *   class = "Drupal\vertex_ai_search_rest\Plugin\rest\resource\VertexSearchPageResource",
 *   provider = "restui",
 *   uri_paths = {
 *     "canonical" = "/search/vertex/v1/{search_page}"
 *   }
 * )
 */
class VertexAISearchResource extends ResourceBase {

  /**
   * The Vertex AI Search Manager.
   *
   * @var \Drupal\vertex_ai_search\Service\VertexSearchManagerInterface
   */
  protected $searchManager;

  /**
   * The config factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * The link relation type manager used to create HTTP header links.
   *
   * @var \Drupal\Component\Plugin\PluginManagerInterface
   */
  protected $linkRelationTypeManager;

  /**
   * Vertex Search Filter Plugin Manager.
   *
   * @var \Drupal\vertex_ai_search\VertexSearchFilterPluginManager
   */
  protected $filterPluginManager;

  /**
   * Constructs a Drupal\rest\Plugin\rest\resource\EntityResource object.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin ID for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\vertex_ai_search\Service\VertexSearchManagerInterface $search_manager
   *   The vertex search_manager service.
   * @param array $serializer_formats
   *   The available serialization formats.
   * @param \Psr\Log\LoggerInterface $logger
   *   A logger instance.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The config factory.
   * @param \Drupal\Component\Plugin\PluginManagerInterface $link_relation_type_manager
   *   The link relation type manager.
   * @param \Drupal\vertex_ai_search\VertexSearchFilterPluginManager $filterPluginManager
   *   Vertex Search Filter Plugin Manager.
   */
  public function __construct(
    array $configuration,
    $plugin_id,
    $plugin_definition,
    VertexSearchManagerInterface $search_manager,
    array $serializer_formats,
    LoggerInterface $logger,
    ConfigFactoryInterface $config_factory,
    PluginManagerInterface $link_relation_type_manager,
    VertexSearchFilterPluginManager $filterPluginManager,
  ) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
    $this->searchManager = $search_manager;
    $this->configFactory = $config_factory;
    $this->linkRelationTypeManager = $link_relation_type_manager;
    $this->filterPluginManager = $filterPluginManager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('vertex_ai_search.search_manager'),
      $container->getParameter('serializer.formats'),
      $container->get('logger.factory')->get('vertex_ai_search'),
      $container->get('config.factory'),
      $container->get('plugin.manager.link_relation_type'),
      $container->get('plugin.manager.vertex_search_filter')
    );
  }

  /**
   * Responds to entity GET requests.
   *
   * @param \Drupal\search\Entity\SearchPage $search_page
   *   The entity object, in this case a SearchPage.
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   The incoming request.
   *
   * @return \Drupal\rest\ResourceResponse
   *   The response containing the entity with its accessible fields.
   */
  public function get(SearchPage $search_page, Request $request) {

    $parameters['page'] = $request->query->get('page', 0);
    $parameters['keys'] = $request->query->get('keys');
    if (!empty($request->query->get('correction', NULL))) {
      $parameters['correction'] = $request->query->get('correction');
    }

    $searchPageConfig = $search_page->get('configuration');

    // Get path to search page on REST client.
    $parameters['search-path'] = $request->query->get(
      'search-path',
      $searchPageConfig['default_client_search_path']
    );

    $resource = $this->searchManager->executeSearch(
      $searchPageConfig,
      $parameters
    );

    // Wrap the resource in a ResourceResponse class and return.
    $resourceResponse = new ResourceResponse(['response' => $resource]);
    $resourceResponse->addCacheableDependency($parameters);

    return $resourceResponse;
  }

  /**
   * {@inheritdoc}
   */
  protected function getBaseRoute($canonical_path, $method) {

    $route = parent::getBaseRoute($canonical_path, $method);
    $parameters = $route->getOption('parameters') ?: [];
    $parameters['search_page']['type'] = 'entity:search_page';
    $route->setOption('parameters', $parameters);

    return $route;

  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc