diff --git a/src/EntityImporterDefinition.php b/src/EntityImporterDefinition.php index 62dd615..50a0400 100644 --- a/src/EntityImporterDefinition.php +++ b/src/EntityImporterDefinition.php @@ -24,7 +24,7 @@ interface EntityImporterDefinition */ public function getName(): string; - /*** + /** * Description displayed in "Available import types" overview. * * @return string diff --git a/src/Reader/ApiReader.php b/src/Reader/ApiReader.php index f010259..436ad1d 100644 --- a/src/Reader/ApiReader.php +++ b/src/Reader/ApiReader.php @@ -11,6 +11,7 @@ use Fastbolt\EntityImporter\EntityImporterDefinition; use Fastbolt\EntityImporter\Reader\Api\PagePaginationStrategy; use Fastbolt\EntityImporter\Reader\Api\PaginationStrategy; +use Fastbolt\EntityImporter\Types\ImportSourceDefinition\Api; use Fastbolt\EntityImporter\Types\ImportSourceDefinition\ImportSourceDefinition; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; @@ -29,7 +30,7 @@ class ApiReader implements ReaderInterface private EntityImporterDefinition $importerDefinition; - private ImportSourceDefinition $importSourceDefinition; + private ImportSourceDefinition|Api $importSourceDefinition; private array $options; @@ -54,9 +55,12 @@ public function __construct( ) { $this->clientFactory = $clientFactory; $this->importerDefinition = $importerDefinition; - $this->importSourceDefinition = $importerDefinition->getImportSourceDefinition(); $this->options = $options; + /** @var Api $apiTmp */ + $apiTmp = $importerDefinition->getImportSourceDefinition(); + $this->importSourceDefinition = $apiTmp; + Assert::keyExists($this->options, 'api_key'); if (!isset($this->options['pagination_strategy'])) { @@ -120,23 +124,26 @@ public function valid(): bool */ private function loadBulkData(int $offset): void { + /** @var Api $importSourceDefinition */ + $importSourceDefinition = $this->importSourceDefinition; $clientFactory = $this->clientFactory; $client = $clientFactory(); /** @var PaginationStrategy $paginationStrategy */ $paginationStrategy = $this->options['pagination_strategy']; $paginationParameters = $paginationStrategy->getRequestParameters($offset); + $queryParameters = $importSourceDefinition->getQueryParameters(); $requestParameters = array_merge_recursive( [ 'verify' => false, 'headers' => [ 'Accept' => 'application/json', - 'X-AUTH-TOKEN' => $this->importSourceDefinition->getOptions()['api_key'], + 'X-AUTH-TOKEN' => (string) $importSourceDefinition->getOptions()['api_key'], ], ], - $paginationParameters + array_merge_recursive($queryParameters, $paginationParameters) ); - $url = $this->importSourceDefinition->getSource(); + $url = $importSourceDefinition->getSource(); $requestMethod = Request::METHOD_GET; try { diff --git a/src/Types/ImportSourceDefinition/Api.php b/src/Types/ImportSourceDefinition/Api.php index b3bd453..63aad2f 100644 --- a/src/Types/ImportSourceDefinition/Api.php +++ b/src/Types/ImportSourceDefinition/Api.php @@ -22,18 +22,25 @@ class Api implements ImportSourceDefinition */ private array $options; + /* + * @var array + */ + private array $queryParameters; + private bool $throwOnSourceUnavailable = true; /** - * @param string $apiHost - * @param string $apiPath - * @param array $options + * @param string $apiHost + * @param string $apiPath + * @param array $options + * @param array $queryParameters */ - public function __construct(string $apiHost, string $apiPath, array $options) + public function __construct(string $apiHost, string $apiPath, array $options, array $queryParameters = []) { $this->options = $options; $this->apiHost = $apiHost; $this->apiPath = $apiPath; + $this->queryParameters = $queryParameters; } /** @@ -72,6 +79,14 @@ public function getOptions(): array return $this->options; } + /** + * @return array + */ + public function getQueryParameters(): array + { + return $this->queryParameters; + } + /** * @return ArchivingStrategy */