feat(service): add ApiService, update services and factories with signature calculator and Pagination VOs

This commit is contained in:
Jérémy Munsch 2026-09-15 12:49:19 +02:00
parent 26d42cc0d8
commit 55caa0729b
Signed by: forge-joniko
GPG key ID: D7EFE2F5CB6CC0E4
11 changed files with 88 additions and 19 deletions

View file

@ -7,6 +7,7 @@ namespace Uwil\ArcadiaApiPhpClient;
use Uwil\ArcadiaApiPhpClient\Factory\ApiClientFactory;
use Uwil\ArcadiaApiPhpClient\Factory\ServiceFactory;
use Uwil\ArcadiaApiPhpClient\Lib\ApiConfig;
use Uwil\ArcadiaApiPhpClient\Service\ApiService;
use Uwil\ArcadiaApiPhpClient\Service\BrandService;
use Uwil\ArcadiaApiPhpClient\Service\EmployeeService;
use Uwil\ArcadiaApiPhpClient\Service\IncoService;
@ -21,7 +22,15 @@ class ArcadiaApiClient
$apiClientFactory = new ApiClientFactory($this->apiConfig);
$apiClient = $apiClientFactory->createClient();
$this->serviceFactory = new ServiceFactory($apiClient);
$this->serviceFactory = new ServiceFactory(
$apiClient,
$this->apiConfig
);
}
public function apiService(): ApiService
{
return $this->serviceFactory->createApiService();
}
public function employees(): EmployeeService

View file

@ -13,6 +13,7 @@ use Microsoft\Kiota\Http\Middleware\Options\UserAgentHandlerOption;
use Microsoft\Kiota\Http\Middleware\RetryHandler;
use Microsoft\Kiota\Http\Middleware\UserAgentHandler;
use Uwil\ArcadiaApiPhpClient\Auth\ApiMandatoryHeadersMiddleware;
use Uwil\ArcadiaApiPhpClient\Auth\RequestSignatureCalculator;
use Uwil\ArcadiaApiPhpClient\Lib\ApiConfig;
use Uwil\ArcadiaApiPhpClient\Lib\LibProperties;
use Uwil\ArcadiaApiPhpClient\Logger\ApiLoggerMiddleware;
@ -31,8 +32,9 @@ final class ApiClientFactory
public function createClient(): ApiClient
{
$libProperties = new LibProperties();
$uaOptions = new UserAgentHandlerOption();
$signatureCalculator = new RequestSignatureCalculator();
$libProperties = new LibProperties();
$uaOptions = new UserAgentHandlerOption();
$uaOptions->setProductName($libProperties->productName);
$uaOptions->setProductVersion($libProperties->productVersion);
@ -48,7 +50,8 @@ final class ApiClientFactory
$handlerStack->push(
ApiMandatoryHeadersMiddleware::signRequest(
apiKey: $this->apiConfig->apiKey,
withSecret: $this->apiConfig->secret
withSecret: $this->apiConfig->secret,
signatureCalculator: $signatureCalculator
),
ApiMandatoryHeadersMiddleware::HANDLER_NAME
);

View file

@ -9,11 +9,14 @@ use Uwil\ArcadiaApiPhpClient\Hydrator\EmployeeHydrator;
use Uwil\ArcadiaApiPhpClient\Hydrator\IncoCompoHydrator;
use Uwil\ArcadiaApiPhpClient\Hydrator\IncoHydrator;
use Uwil\ArcadiaApiPhpClient\Hydrator\IncoShortHydrator;
use Uwil\ArcadiaApiPhpClient\Lib\ApiConfig;
use Uwil\ArcadiaApiPhpClient\Repository\BrandApiRepository;
use Uwil\ArcadiaApiPhpClient\Repository\EmployeeApiRepository;
use Uwil\ArcadiaApiPhpClient\Repository\IncoApiRepository;
use Uwil\ArcadiaApiPhpClient\Repository\IncoCompoApiRepository;
use Uwil\ArcadiaApiPhpClient\Repository\IncoShortApiRepository;
use Uwil\ArcadiaApiPhpClient\Service\ApiService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaApiService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaBrandService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaEmployeeService;
use Uwil\ArcadiaApiPhpClient\Service\ArcadiaIncoService;
@ -27,6 +30,8 @@ use Uwil\ArcadiaKiotaOpenApiClient\ApiClient;
*/
final class ServiceFactory
{
private ?ApiService $apiService = null;
private ?EmployeeService $employeeService = null;
private ?IncoService $incoService = null;
@ -34,10 +39,18 @@ final class ServiceFactory
private ?BrandService $brandService = null;
public function __construct(
private readonly ApiClient $apiClient
private readonly ApiClient $apiClient,
private readonly ApiConfig $apiConfig
) {
}
public function createApiService(): ApiService
{
return $this->apiService ??= new ArcadiaApiService(
$this->apiConfig
);
}
public function createEmployeeService(): EmployeeService
{
return $this->employeeService ??= new ArcadiaEmployeeService(

View file

@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Uwil\ArcadiaApiPhpClient\Service;
interface ApiService
{
public function ping(): bool;
}

View file

@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Uwil\ArcadiaApiPhpClient\Service;
use Uwil\ArcadiaApiPhpClient\Lib\ApiConfig;
/**
* @internal
*/
final class ArcadiaApiService implements ApiService
{
public function __construct(
private ApiConfig $apiConfig
) {
}
#[\Override]
public function ping(): bool
{
$url = clone $this->apiConfig->endpoint->withPath('/api/ping');
$ch = curl_init((string) $url);
curl_setopt($ch, \CURLOPT_RETURNTRANSFER, true);
if ($this->apiConfig->ignoreSelfSignedCert) {
curl_setopt($ch, \CURLOPT_SSL_VERIFYPEER, false);
}
$body = curl_exec($ch);
return $body === '"pong"';
}
}

View file

@ -8,8 +8,8 @@ use Uwil\ArcadiaApiPhpClient\Error\ApiError;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\Brand;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\PageOf;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\BrandCode;
use Uwil\ArcadiaApiPhpClient\Lib\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\StreamOf;
use Uwil\ArcadiaApiPhpClient\Repository\BrandRepository;

View file

@ -10,8 +10,8 @@ use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\PageOf;
use Uwil\ArcadiaApiPhpClient\Lib\ApiSorter\EmployeeSorter;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\ArcadiaEmployeeId;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\SiteId;
use Uwil\ArcadiaApiPhpClient\Lib\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\StreamOf;
use Uwil\ArcadiaApiPhpClient\Repository\EmployeeRepository;

View file

@ -12,8 +12,8 @@ use Uwil\ArcadiaApiPhpClient\Lib\ApiSorter\IncoSorter;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\BrandCode;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoCompoId;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoId;
use Uwil\ArcadiaApiPhpClient\Lib\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\StreamOf;
use Uwil\ArcadiaApiPhpClient\Repository\IncoCompoRepository;
use Uwil\ArcadiaApiPhpClient\Repository\IncoRepository;
@ -157,7 +157,7 @@ final class ArcadiaIncoService implements IncoService
return $this->incoRepository->findWhere(
$incoIdLike,
$this->validateBrands($onBrands),
Pagination::firstPage(50)
Pagination::firstPage(new PageSize(50))
);
}
@ -169,7 +169,7 @@ final class ArcadiaIncoService implements IncoService
return $this->incoShortRepository->findWhere(
$incoIdLike,
$this->validateBrands($onBrands),
Pagination::firstPage(50)
Pagination::firstPage(new PageSize(50))
);
}

View file

@ -8,8 +8,8 @@ use Uwil\ArcadiaApiPhpClient\Error\ApiError;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\Brand;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\PageOf;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\BrandCode;
use Uwil\ArcadiaApiPhpClient\Lib\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\StreamOf;
interface BrandService

View file

@ -10,8 +10,8 @@ use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\PageOf;
use Uwil\ArcadiaApiPhpClient\Lib\ApiSorter\EmployeeSorter;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\ArcadiaEmployeeId;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\SiteId;
use Uwil\ArcadiaApiPhpClient\Lib\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\StreamOf;
interface EmployeeService

View file

@ -12,8 +12,8 @@ use Uwil\ArcadiaApiPhpClient\Lib\ApiSorter\IncoSorter;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\BrandCode;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoCompoId;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoId;
use Uwil\ArcadiaApiPhpClient\Lib\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageSize;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\Pagination;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\StreamOf;
interface IncoService