PageRenderTime 28ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/sale/handlers/delivery/yandextaxi/servicecontainer.php

https://gitlab.com/alexprowars/bitrix
PHP | 354 lines | 220 code | 57 blank | 77 comment | 22 complexity | be25905f0157fb2f0b724426f2e31287 MD5 | raw file
  1. <?php
  2. namespace Sale\Handlers\Delivery\YandexTaxi;
  3. use Bitrix\Main\Config\Option;
  4. use Sale\Handlers\Delivery\YandexTaxi\Api\Api;
  5. use Sale\Handlers\Delivery\YandexTaxi\Api\ApiResult\Journal\EventBuilder;
  6. use Sale\Handlers\Delivery\YandexTaxi\Api\ClaimReader\ClaimReader;
  7. use Sale\Handlers\Delivery\YandexTaxi\Api\Transport\Client;
  8. use Sale\Handlers\Delivery\YandexTaxi\Api\Transport\OauthTokenProvider;
  9. use Sale\Handlers\Delivery\YandexTaxi\Api\Tariffs\Repository;
  10. use Sale\Handlers\Delivery\YandexTaxi\ClaimBuilder\ClaimBuilder;
  11. use Sale\Handlers\Delivery\YandexTaxi\Common\Logger;
  12. use Sale\Handlers\Delivery\YandexTaxi\Common\ReferralSourceBuilder;
  13. use Sale\Handlers\Delivery\YandexTaxi\Common\RegionCoordinatesMapper;
  14. use Sale\Handlers\Delivery\YandexTaxi\Common\RegionFinder;
  15. use Sale\Handlers\Delivery\YandexTaxi\Common\TariffNameBuilder;
  16. use Sale\Handlers\Delivery\YandexTaxi\EventJournal\JournalProcessor;
  17. use Sale\Handlers\Delivery\YandexTaxi\EventJournal\EventProcessor;
  18. use Sale\Handlers\Delivery\YandexTaxi\EventJournal\EventReader;
  19. use Sale\Handlers\Delivery\YandexTaxi\Installer\Installer;
  20. /**
  21. * Class ServiceLocator
  22. * @package Sale\Handlers\Delivery\YandexTaxi
  23. * @internal
  24. */
  25. final class ServiceContainer
  26. {
  27. /** @var Api */
  28. private static $api;
  29. /** @var OauthTokenProvider */
  30. private static $oauthTokenProvider;
  31. /** @var ClaimReader */
  32. private static $claimReader;
  33. /** @var EventBuilder */
  34. private static $eventJournalBuilder;
  35. /** @var Logger */
  36. private static $logger;
  37. /** @var Client */
  38. private static $transport;
  39. /** @var JournalProcessor */
  40. private static $journalProcessor;
  41. /** @var EventReader */
  42. private static $eventReader;
  43. /** @var EventProcessor */
  44. private static $eventProcessor;
  45. /** @var RateCalculator */
  46. private static $rateCalculator;
  47. /** @var TariffsChecker */
  48. private static $tariffsChecker;
  49. /** @var Installer */
  50. private static $installer;
  51. /** @var ClaimBuilder */
  52. private static $claimBuilder;
  53. /** @var RegionFinder */
  54. private static $regionFinder;
  55. /** @var RegionCoordinatesMapper */
  56. private static $regionCoordinatesMapper;
  57. /** @var Repository */
  58. private static $tariffsRepository;
  59. /** @var ReferralSourceBuilder */
  60. private static $referralSourceBuilder;
  61. /** @var TariffNameBuilder */
  62. private static $tariffNameBuilder;
  63. /**
  64. * @return Logger
  65. */
  66. private static function getLogger(): Logger
  67. {
  68. if (is_null(static::$logger))
  69. {
  70. static::$logger = new Logger();
  71. }
  72. return static::$logger;
  73. }
  74. /**
  75. * @return ClaimReader
  76. */
  77. private static function getClaimReader(): ClaimReader
  78. {
  79. if (is_null(static::$claimReader))
  80. {
  81. static::$claimReader = new ClaimReader();
  82. }
  83. return static::$claimReader;
  84. }
  85. /**
  86. * @return EventBuilder
  87. */
  88. private static function getEventJournalBuilder(): EventBuilder
  89. {
  90. if (is_null(static::$eventJournalBuilder))
  91. {
  92. static::$eventJournalBuilder = new EventBuilder();
  93. }
  94. return static::$eventJournalBuilder;
  95. }
  96. /**
  97. * @return Client
  98. */
  99. private static function getTransport(): Client
  100. {
  101. if (is_null(static::$transport))
  102. {
  103. static::$transport = new Client(
  104. static::getOauthTokenProvider(),
  105. static::getLogger(),
  106. static::getReferralSourceBuilder()
  107. );
  108. if (
  109. (int)Option::get('sale', 'delivery_service_yandex_taxi_sandbox', 0) == 1
  110. || (
  111. defined('BITRIX_SALE_HANDLERS_YANDEX_TAXI_TEST_ENVIRONMENT')
  112. && BITRIX_SALE_HANDLERS_YANDEX_TAXI_TEST_ENVIRONMENT === true
  113. )
  114. )
  115. {
  116. static::$transport->setIsTestEnvironment(true);
  117. }
  118. }
  119. return static::$transport;
  120. }
  121. /**
  122. * @return OauthTokenProvider
  123. */
  124. public static function getOauthTokenProvider(): OauthTokenProvider
  125. {
  126. if (is_null(static::$oauthTokenProvider))
  127. {
  128. static::$oauthTokenProvider = new OauthTokenProvider();
  129. }
  130. return static::$oauthTokenProvider;
  131. }
  132. /**
  133. * @return Api
  134. */
  135. public static function getApi(): Api
  136. {
  137. if (is_null(static::$api))
  138. {
  139. static::$api = new Api(
  140. static::getTransport(),
  141. static::getClaimReader(),
  142. static::getEventJournalBuilder(),
  143. static::getLogger()
  144. );
  145. }
  146. return static::$api;
  147. }
  148. /**
  149. * @return JournalProcessor
  150. */
  151. public static function getJournalProcessor(): JournalProcessor
  152. {
  153. if (is_null(static::$journalProcessor))
  154. {
  155. static::$journalProcessor = new JournalProcessor(
  156. static::getEventReader(),
  157. static::getEventProcessor()
  158. );
  159. }
  160. return static::$journalProcessor;
  161. }
  162. /**
  163. * @return EventReader
  164. */
  165. private static function getEventReader(): EventReader
  166. {
  167. if (is_null(static::$eventReader))
  168. {
  169. static::$eventReader = new EventReader(static::getApi());
  170. }
  171. return static::$eventReader;
  172. }
  173. /**
  174. * @return EventProcessor
  175. */
  176. private static function getEventProcessor(): EventProcessor
  177. {
  178. if (is_null(static::$eventProcessor))
  179. {
  180. static::$eventProcessor = new EventProcessor(static::getApi());
  181. }
  182. return static::$eventProcessor;
  183. }
  184. /**
  185. * @return RateCalculator
  186. */
  187. public static function getRateCalculator(): RateCalculator
  188. {
  189. if (is_null(static::$rateCalculator))
  190. {
  191. static::$rateCalculator = new RateCalculator(
  192. static::getApi(),
  193. static::getClaimBuilder(),
  194. static::getTariffsChecker()
  195. );
  196. }
  197. return static::$rateCalculator;
  198. }
  199. /**
  200. * @return TariffsChecker
  201. */
  202. public static function getTariffsChecker(): TariffsChecker
  203. {
  204. if (is_null(static::$tariffsChecker))
  205. {
  206. static::$tariffsChecker = new TariffsChecker(static::getApi());
  207. }
  208. return static::$tariffsChecker;
  209. }
  210. /**
  211. * @return Installer
  212. */
  213. public static function getInstaller(): Installer
  214. {
  215. if (is_null(static::$installer))
  216. {
  217. static::$installer = new Installer(
  218. static::getTariffsRepository(),
  219. static::getTariffNameBuilder()
  220. );
  221. }
  222. return static::$installer;
  223. }
  224. /**
  225. * @return ClaimBuilder
  226. */
  227. public static function getClaimBuilder(): ClaimBuilder
  228. {
  229. if (is_null(static::$claimBuilder))
  230. {
  231. static::$claimBuilder = new ClaimBuilder(
  232. static::getTariffsRepository(),
  233. static::getReferralSourceBuilder()
  234. );
  235. }
  236. return static::$claimBuilder;
  237. }
  238. /**
  239. * @return RegionFinder
  240. */
  241. public static function getRegionFinder(): RegionFinder
  242. {
  243. if (is_null(static::$regionFinder))
  244. {
  245. static::$regionFinder = new RegionFinder();
  246. }
  247. return static::$regionFinder;
  248. }
  249. /**
  250. * @return RegionCoordinatesMapper
  251. */
  252. public static function getRegionCoordinatesMapper(): RegionCoordinatesMapper
  253. {
  254. if (is_null(static::$regionCoordinatesMapper))
  255. {
  256. static::$regionCoordinatesMapper = new RegionCoordinatesMapper();
  257. }
  258. return static::$regionCoordinatesMapper;
  259. }
  260. /**
  261. * @return Repository
  262. */
  263. public static function getTariffsRepository(): Repository
  264. {
  265. if (is_null(static::$tariffsRepository))
  266. {
  267. static::$tariffsRepository = new Repository();
  268. }
  269. return static::$tariffsRepository;
  270. }
  271. /**
  272. * @return ReferralSourceBuilder
  273. */
  274. public static function getReferralSourceBuilder(): ReferralSourceBuilder
  275. {
  276. if (is_null(static::$referralSourceBuilder))
  277. {
  278. static::$referralSourceBuilder = new ReferralSourceBuilder(
  279. static::getRegionFinder()
  280. );
  281. }
  282. return static::$referralSourceBuilder;
  283. }
  284. /**
  285. * @return TariffNameBuilder
  286. */
  287. public static function getTariffNameBuilder(): TariffNameBuilder
  288. {
  289. if (is_null(static::$tariffNameBuilder))
  290. {
  291. static::$tariffNameBuilder = new TariffNameBuilder(
  292. static::getRegionFinder()
  293. );
  294. }
  295. return static::$tariffNameBuilder;
  296. }
  297. }