<?php declare(strict_types=1); namespace Xentral\Modules\Ebay; use ApplicationCore; use GuzzleHttp\Client; use Xentral\Core\DependencyInjection\ContainerInterface; use Xentral\Modules\Ebay\Client\EbayRestApiClient; use Xentral\Modules\Ebay\Gateway\EbayListingGateway; use Xentral\Modules\Ebay\Gateway\EbayRestApiGateway; use Xentral\Modules\Ebay\Module\EbayRestApiModule; use Xentral\Modules\Ebay\Service\EbayListingService; use Xentral\Modules\Ebay\Service\EbayListingXmlSerializer; use Xentral\Modules\Ebay\Service\EbayRestApiService; use Xentral\Modules\Ebay\Service\EbayStockLoggingService; use Xentral\Modules\Ebay\Wrapper\StockCalculationWrapper; final class Bootstrap { /** * @return array */ public static function registerServices(): array { return [ 'EbayListingGateway' => 'onInitEbayListingGateway', 'EbayListingService' => 'onInitEbayListingService', 'EbayRestApiModule' => 'onInitEbayRestApiModule', 'EbayStockLoggingService' => 'onInitEbayStockLoggingService', 'EbayRestApiGateway' => 'onInitEbayRestApiGateway', ]; } /** * @param ContainerInterface $container * * @return EbayListingService */ public static function onInitEbayListingService(ContainerInterface $container): EbayListingService { return new EbayListingService( $container->get('EbayListingGateway'), $container->get('Database'), new EbayListingXmlSerializer(), self::onInitStockCalculationWrapper($container) ); } /** * @param ContainerInterface $container * * @return StockCalculationWrapper */ private static function onInitStockCalculationWrapper(ContainerInterface $container): StockCalculationWrapper { /** @var ApplicationCore $app */ $app = $container->get('LegacyApplication'); return new StockCalculationWrapper($app->erp, $container->get('Database')); } /** * @param ContainerInterface $container * * @return EbayStockLoggingService */ public static function onInitEbayStockLoggingService(ContainerInterface $container): EbayStockLoggingService { return new EbayStockLoggingService($container->get('Database')); } /** * @param ContainerInterface $container * * @return EbayListingGateway */ public static function onInitEbayListingGateway(ContainerInterface $container): EbayListingGateway { return new EbayListingGateway($container->get('Database')); } /** * @param ContainerInterface $container * * @return EbayRestApiModule */ public static function onInitEbayRestApiModule(ContainerInterface $container): EbayRestApiModule { return new EbayRestApiModule( self::onInitEbayRestApiClient(), self::onInitEbayRestApiGateway($container), self::onInitEbayRestApiService($container) ); } /** * @param ContainerInterface $container * * @return EbayRestApiGateway */ public static function onInitEbayRestApiGateway(ContainerInterface $container): EbayRestApiGateway { return new EbayRestApiGateway($container->get('Database')); } /** * @return EbayRestApiClient */ private static function onInitEbayRestApiClient(): EbayRestApiClient { return new EbayRestApiClient(new Client()); } /** * @param ContainerInterface $container * * @return EbayRestApiService */ private static function onInitEbayRestApiService(ContainerInterface $container): EbayRestApiService { return new EbayRestApiService($container->get('Database')); } }