OpenXE/classes/Modules/GoogleApi/Bootstrap.php
2021-05-21 08:49:41 +02:00

119 lines
3.8 KiB
PHP

<?php
declare(strict_types=1);
namespace Xentral\Modules\GoogleApi;
use ApplicationCore;
use Xentral\Components\Http\Request;
use Xentral\Components\HttpClient\HttpClientFactory;
use Xentral\Core\DependencyInjection\ContainerInterface;
use Xentral\Modules\GoogleApi\Client\GoogleApiClientFactory;
use Xentral\Modules\GoogleApi\Service\GoogleAccountGateway;
use Xentral\Modules\GoogleApi\Service\GoogleAccountService;
use Xentral\Modules\GoogleApi\Service\GoogleAuthorizationService;
use Xentral\Modules\GoogleApi\Service\GoogleCredentialsService;
use Xentral\Modules\GoogleApi\Wrapper\CompanyConfigWrapper;
final class Bootstrap
{
/**
* @return array
*/
public static function registerServices(): array
{
return [
'GoogleCredentialsService' => 'onInitGoogleCredentialsService',
'GoogleAccountGateway' => 'onInitGoogleAccountGateway',
'GoogleAccountService' => 'onInitGoogleAccountService',
'GoogleAuthorizationService' => 'onInitGoogleAuthorizationService',
'GoogleApiClientFactory' => 'onInitGoogleApiClientFactory',
];
}
/**
* @param ContainerInterface $container
*
* @return GoogleCredentialsService
*/
public static function onInitGoogleCredentialsService(ContainerInterface $container): GoogleCredentialsService
{
return new GoogleCredentialsService(
self::onInitCompanyConfigWrapper($container)
);
}
/**
* @param ContainerInterface $container
*
* @return GoogleAccountGateway
*/
public static function onInitGoogleAccountGateway(ContainerInterface $container): GoogleAccountGateway
{
return new GoogleAccountGateway($container->get('Database'));
}
/**
* @param ContainerInterface $container
*
* @return GoogleAccountService
*/
public static function onInitGoogleAccountService(ContainerInterface $container): GoogleAccountService
{
return new GoogleAccountService(
$container->get('GoogleAccountGateway'),
$container->get('Database')
);
}
/**
* @param ContainerInterface $container
*
* @return GoogleAuthorizationService
*/
public static function onInitGoogleAuthorizationService(ContainerInterface $container): GoogleAuthorizationService
{
/** @var GoogleCredentialsService $credentialService */
$credentialService = $container->get('GoogleCredentialsService');
/** @var Request $request */
$request = $container->get('Request');
/** @var HttpClientFactory $clientFactory */
$clientFactory = $container->get('HttpClientFactory');
$httpClient = $clientFactory->createClient();
return new GoogleAuthorizationService(
$container->get('GoogleAccountGateway'),
$container->get('GoogleAccountService'),
$httpClient,
$credentialService->getCredentials(),
$request->getBaseUrl()
);
}
/**
* @param ContainerInterface $container
*
* @return GoogleApiClientFactory
*/
public static function onInitGoogleApiClientFactory(ContainerInterface $container): GoogleApiClientFactory
{
return new GoogleApiClientFactory(
$container->get('GoogleAccountGateway'),
$container->get('GoogleAuthorizationService'),
$container->get('HttpClientFactory')
);
}
/**
* @param ContainerInterface $container
*
* @return CompanyConfigWrapper
*/
private static function onInitCompanyConfigWrapper(ContainerInterface $container): CompanyConfigWrapper
{
/** @var ApplicationCore $app */
$app = $container->get('LegacyApplication');
return new CompanyConfigWrapper($app->erp);
}
}