ldc-arcadia-genesis-php-client/src/Factory/ServiceFactory.php

107 lines
3 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace Uwil\ArcadiaApiPhpClient\Factory;
use Uwil\ArcadiaApiPhpClient\Lib\ApiConfig;
use Uwil\ArcadiaApiPhpClient\Mapper\BrandMapper;
use Uwil\ArcadiaApiPhpClient\Mapper\EmployeeMapper;
use Uwil\ArcadiaApiPhpClient\Mapper\IncoCompoMapper;
use Uwil\ArcadiaApiPhpClient\Mapper\IncoMapper;
use Uwil\ArcadiaApiPhpClient\Mapper\IncoShortMapper;
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;
use Uwil\ArcadiaApiPhpClient\Service\BrandService;
use Uwil\ArcadiaApiPhpClient\Service\EmployeeService;
use Uwil\ArcadiaApiPhpClient\Service\IncoService;
use Uwil\ArcadiaKiotaOpenApiClient\ApiClient;
/**
* @internal
*/
final class ServiceFactory
{
private ?ApiService $apiService = null;
private ?EmployeeService $employeeService = null;
private ?IncoService $incoService = null;
private ?BrandService $brandService = null;
public function __construct(
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(
new EmployeeApiRepository(
$this->apiClient,
new EmployeeMapper()
)
);
}
public function createIncoService(): IncoService
{
return $this->incoService ??= new ArcadiaIncoService(
new IncoApiRepository(
$this->apiClient,
new IncoMapper()
),
new IncoShortApiRepository(
$this->apiClient,
new IncoShortMapper()
),
new IncoCompoApiRepository(
$this->apiClient,
new IncoCompoMapper()
)
);
}
public function createBrandService(): BrandService
{
return $this->brandService ??= new ArcadiaBrandService(
new BrandApiRepository(
$this->apiClient,
new BrandMapper()
)
);
}
public function employeeService(): EmployeeService
{
return $this->createEmployeeService();
}
public function incoService(): IncoService
{
return $this->createIncoService();
}
public function brandService(): BrandService
{
return $this->createBrandService();
}
}