From 2da40edf2ed75371e10c0f9e1e853e94dc9272bc Mon Sep 17 00:00:00 2001 From: SLeussink Date: Mon, 7 Oct 2024 14:30:13 +0200 Subject: [PATCH 01/14] cs --- src/EntityImporterDefinition.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From e277064938c80fb6d7ad6cb8444854e55fa21ca0 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Mon, 7 Oct 2024 14:39:27 +0200 Subject: [PATCH 02/14] adding query params --- src/Types/ImportSourceDefinition/Api.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Types/ImportSourceDefinition/Api.php b/src/Types/ImportSourceDefinition/Api.php index b3bd453..22d9951 100644 --- a/src/Types/ImportSourceDefinition/Api.php +++ b/src/Types/ImportSourceDefinition/Api.php @@ -22,18 +22,22 @@ class Api implements ImportSourceDefinition */ private array $options; + 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 +76,14 @@ public function getOptions(): array return $this->options; } + /** + * @return array + */ + public function getQueryParameters(): array + { + return $this->queryParameters; + } + /** * @return ArchivingStrategy */ From f3fcb539505c145cb71491b20ad607ed64856ce2 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Mon, 7 Oct 2024 14:56:10 +0200 Subject: [PATCH 03/14] wip --- src/Reader/ApiReader.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Reader/ApiReader.php b/src/Reader/ApiReader.php index f010259..5d4ce5a 100644 --- a/src/Reader/ApiReader.php +++ b/src/Reader/ApiReader.php @@ -126,6 +126,7 @@ private function loadBulkData(int $offset): void /** @var PaginationStrategy $paginationStrategy */ $paginationStrategy = $this->options['pagination_strategy']; $paginationParameters = $paginationStrategy->getRequestParameters($offset); + $queryParameters = $this->importSourceDefinition->getQueryParameters(); $requestParameters = array_merge_recursive( [ 'verify' => false, @@ -134,7 +135,7 @@ private function loadBulkData(int $offset): void 'X-AUTH-TOKEN' => $this->importSourceDefinition->getOptions()['api_key'], ], ], - $paginationParameters + array_merge_recursive($queryParameters, $paginationParameters) ); $url = $this->importSourceDefinition->getSource(); $requestMethod = Request::METHOD_GET; From 1524f9fc7ab0d1791649630f635fe20664e99249 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Mon, 7 Oct 2024 15:14:04 +0200 Subject: [PATCH 04/14] cs --- src/Types/ImportSourceDefinition/Api.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Types/ImportSourceDefinition/Api.php b/src/Types/ImportSourceDefinition/Api.php index 22d9951..1d9a361 100644 --- a/src/Types/ImportSourceDefinition/Api.php +++ b/src/Types/ImportSourceDefinition/Api.php @@ -22,6 +22,9 @@ class Api implements ImportSourceDefinition */ private array $options; + /* + * @var array + */ private array $queryParameters; private bool $throwOnSourceUnavailable = true; From 706e7c0ba78fdc23c83c7895dd4b714f6efda107 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 09:56:40 +0200 Subject: [PATCH 05/14] trying to resolve psalm --- src/Reader/ApiReader.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Reader/ApiReader.php b/src/Reader/ApiReader.php index 5d4ce5a..0f35549 100644 --- a/src/Reader/ApiReader.php +++ b/src/Reader/ApiReader.php @@ -11,7 +11,7 @@ use Fastbolt\EntityImporter\EntityImporterDefinition; use Fastbolt\EntityImporter\Reader\Api\PagePaginationStrategy; use Fastbolt\EntityImporter\Reader\Api\PaginationStrategy; -use Fastbolt\EntityImporter\Types\ImportSourceDefinition\ImportSourceDefinition; +use Fastbolt\EntityImporter\Types\ImportSourceDefinition\Api; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\Response; @@ -29,7 +29,7 @@ class ApiReader implements ReaderInterface private EntityImporterDefinition $importerDefinition; - private ImportSourceDefinition $importSourceDefinition; + private Api $importSourceDefinition; private array $options; @@ -54,7 +54,7 @@ public function __construct( ) { $this->clientFactory = $clientFactory; $this->importerDefinition = $importerDefinition; - $this->importSourceDefinition = $importerDefinition->getImportSourceDefinition(); + $this->importSourceDefinition = /** @var Api */ $importerDefinition->getImportSourceDefinition(); $this->options = $options; Assert::keyExists($this->options, 'api_key'); From db4f51493f4b0633caaa74d4d3a326adf4baec49 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 10:51:43 +0200 Subject: [PATCH 06/14] psalm --- src/Reader/ApiReader.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Reader/ApiReader.php b/src/Reader/ApiReader.php index 0f35549..a03b55b 100644 --- a/src/Reader/ApiReader.php +++ b/src/Reader/ApiReader.php @@ -54,9 +54,12 @@ public function __construct( ) { $this->clientFactory = $clientFactory; $this->importerDefinition = $importerDefinition; - $this->importSourceDefinition = /** @var Api */ $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'])) { From dc94923513ad3e59fb1ef849924bd4844c350809 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 11:04:59 +0200 Subject: [PATCH 07/14] psalm --- src/Types/ImportSourceDefinition/Api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Types/ImportSourceDefinition/Api.php b/src/Types/ImportSourceDefinition/Api.php index 1d9a361..f919ddc 100644 --- a/src/Types/ImportSourceDefinition/Api.php +++ b/src/Types/ImportSourceDefinition/Api.php @@ -80,7 +80,7 @@ public function getOptions(): array } /** - * @return array + * @return array */ public function getQueryParameters(): array { From bd7bc8778944876a90749fccd3f9ea6f0203dbe9 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 11:08:26 +0200 Subject: [PATCH 08/14] psalm --- src/Types/ImportSourceDefinition/Api.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Types/ImportSourceDefinition/Api.php b/src/Types/ImportSourceDefinition/Api.php index f919ddc..7a7b359 100644 --- a/src/Types/ImportSourceDefinition/Api.php +++ b/src/Types/ImportSourceDefinition/Api.php @@ -23,7 +23,7 @@ class Api implements ImportSourceDefinition private array $options; /* - * @var array + * @var array */ private array $queryParameters; @@ -80,7 +80,7 @@ public function getOptions(): array } /** - * @return array + * @return array */ public function getQueryParameters(): array { From 6e037bd4a5df6497c0ddbbb9da9fac03f9914e10 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 11:10:42 +0200 Subject: [PATCH 09/14] psalm --- src/Types/ImportSourceDefinition/Api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Types/ImportSourceDefinition/Api.php b/src/Types/ImportSourceDefinition/Api.php index 7a7b359..63aad2f 100644 --- a/src/Types/ImportSourceDefinition/Api.php +++ b/src/Types/ImportSourceDefinition/Api.php @@ -23,7 +23,7 @@ class Api implements ImportSourceDefinition private array $options; /* - * @var array + * @var array */ private array $queryParameters; From 947d38acdf033cc0c395abd60c3e2f24c5741530 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 11:34:32 +0200 Subject: [PATCH 10/14] psalm --- tests/unit/Reader/Factory/ApiReaderFactoryTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php index 89ff4b4..1d3b555 100644 --- a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php +++ b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php @@ -8,8 +8,8 @@ namespace Fastbolt\EntityImporter\Tests\Unit\Reader\Factory; -use Fastbolt\EntityImporter\EntityImporterDefinition; use Fastbolt\EntityImporter\Reader\Factory\ApiReaderFactory; +use Fastbolt\EntityImporter\Types\ImportSourceDefinition\Api; use Fastbolt\TestHelpers\BaseTestCase; use Fastbolt\TestHelpers\Visibility; use GuzzleHttp\Client; @@ -26,7 +26,7 @@ class ApiReaderFactoryTest extends BaseTestCase private $clientFactory; /** - * @var EntityImporterDefinition&MockObject + * @var Api&MockObject */ private $importerDefinition; @@ -64,7 +64,7 @@ protected function setUp(): void parent::setUp(); $this->clientFactory = $this->getCallable(); - $this->importerDefinition = $this->getMock(EntityImporterDefinition::class); + $this->importerDefinition = $this->getMock(Api::class); $this->client = $this->getMock(Client::class); } } From 4962be17d8377b1426355928e2de83449718f158 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 12:06:13 +0200 Subject: [PATCH 11/14] fix --- tests/unit/Reader/Factory/ApiReaderFactoryTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php index 1d3b555..eb9aab5 100644 --- a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php +++ b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php @@ -8,6 +8,7 @@ namespace Fastbolt\EntityImporter\Tests\Unit\Reader\Factory; +use Fastbolt\EntityImporter\EntityImporterDefinition; use Fastbolt\EntityImporter\Reader\Factory\ApiReaderFactory; use Fastbolt\EntityImporter\Types\ImportSourceDefinition\Api; use Fastbolt\TestHelpers\BaseTestCase; @@ -26,7 +27,7 @@ class ApiReaderFactoryTest extends BaseTestCase private $clientFactory; /** - * @var Api&MockObject + * @var EntityImporterDefinition&MockObject */ private $importerDefinition; From 999aca09544f21090bd7e0f1ff7b0481f66af401 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 12:10:50 +0200 Subject: [PATCH 12/14] fix --- tests/unit/Reader/Factory/ApiReaderFactoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php index eb9aab5..0b27921 100644 --- a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php +++ b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php @@ -65,7 +65,7 @@ protected function setUp(): void parent::setUp(); $this->clientFactory = $this->getCallable(); - $this->importerDefinition = $this->getMock(Api::class); + $this->importerDefinition = $this->getMock(EntityImporterDefinition::class); $this->client = $this->getMock(Client::class); } } From 1da9622ee3251bea4cf3c584401a6e1f1e496966 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Tue, 8 Oct 2024 12:14:26 +0200 Subject: [PATCH 13/14] fix --- src/Reader/ApiReader.php | 3 ++- tests/unit/Reader/Factory/ApiReaderFactoryTest.php | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Reader/ApiReader.php b/src/Reader/ApiReader.php index a03b55b..da17837 100644 --- a/src/Reader/ApiReader.php +++ b/src/Reader/ApiReader.php @@ -12,6 +12,7 @@ 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; use GuzzleHttp\Psr7\Response; @@ -29,7 +30,7 @@ class ApiReader implements ReaderInterface private EntityImporterDefinition $importerDefinition; - private Api $importSourceDefinition; + private ImportSourceDefinition|Api $importSourceDefinition; private array $options; diff --git a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php index 0b27921..89ff4b4 100644 --- a/tests/unit/Reader/Factory/ApiReaderFactoryTest.php +++ b/tests/unit/Reader/Factory/ApiReaderFactoryTest.php @@ -10,7 +10,6 @@ use Fastbolt\EntityImporter\EntityImporterDefinition; use Fastbolt\EntityImporter\Reader\Factory\ApiReaderFactory; -use Fastbolt\EntityImporter\Types\ImportSourceDefinition\Api; use Fastbolt\TestHelpers\BaseTestCase; use Fastbolt\TestHelpers\Visibility; use GuzzleHttp\Client; From 371cd787ada8c24621eda683cac954cab2176560 Mon Sep 17 00:00:00 2001 From: SLeussink Date: Mon, 14 Oct 2024 13:54:21 +0200 Subject: [PATCH 14/14] fix --- src/Reader/ApiReader.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Reader/ApiReader.php b/src/Reader/ApiReader.php index da17837..436ad1d 100644 --- a/src/Reader/ApiReader.php +++ b/src/Reader/ApiReader.php @@ -124,24 +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 = $this->importSourceDefinition->getQueryParameters(); + $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'], ], ], array_merge_recursive($queryParameters, $paginationParameters) ); - $url = $this->importSourceDefinition->getSource(); + $url = $importSourceDefinition->getSource(); $requestMethod = Request::METHOD_GET; try {