123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\InventoryIndexer\Indexer\Stock;
- use Magento\Framework\App\ResourceConnection;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\Alias;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexHandlerInterface;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexNameBuilder;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexStructureInterface;
- use Magento\InventoryMultiDimensionalIndexerApi\Model\IndexTableSwitcherInterface;
- use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
- use Magento\InventoryIndexer\Indexer\InventoryIndexer;
- /**
- * Stock indexer
- * Extension point for indexation
- *
- * @api
- */
- class StockIndexer
- {
- /**
- * @var GetAllStockIds
- */
- private $getAllStockIds;
- /**
- * @var IndexStructureInterface
- */
- private $indexStructure;
- /**
- * @var IndexHandlerInterface
- */
- private $indexHandler;
- /**
- * @var IndexNameBuilder
- */
- private $indexNameBuilder;
- /**
- * @var IndexDataProviderByStockId
- */
- private $indexDataProviderByStockId;
- /**
- * @var IndexTableSwitcherInterface
- */
- private $indexTableSwitcher;
- /**
- * @var DefaultStockProviderInterface
- */
- private $defaultStockProvider;
- /**
- * $indexStructure is reserved name for construct variable in index internal mechanism
- *
- * @param GetAllStockIds $getAllStockIds
- * @param IndexStructureInterface $indexStructureHandler
- * @param IndexHandlerInterface $indexHandler
- * @param IndexNameBuilder $indexNameBuilder
- * @param IndexDataProviderByStockId $indexDataProviderByStockId
- * @param IndexTableSwitcherInterface $indexTableSwitcher
- * @param DefaultStockProviderInterface $defaultStockProvider
- */
- public function __construct(
- GetAllStockIds $getAllStockIds,
- IndexStructureInterface $indexStructureHandler,
- IndexHandlerInterface $indexHandler,
- IndexNameBuilder $indexNameBuilder,
- IndexDataProviderByStockId $indexDataProviderByStockId,
- IndexTableSwitcherInterface $indexTableSwitcher,
- DefaultStockProviderInterface $defaultStockProvider
- ) {
- $this->getAllStockIds = $getAllStockIds;
- $this->indexStructure = $indexStructureHandler;
- $this->indexHandler = $indexHandler;
- $this->indexNameBuilder = $indexNameBuilder;
- $this->indexDataProviderByStockId = $indexDataProviderByStockId;
- $this->indexTableSwitcher = $indexTableSwitcher;
- $this->defaultStockProvider = $defaultStockProvider;
- }
- /**
- * @return void
- */
- public function executeFull()
- {
- $stockIds = $this->getAllStockIds->execute();
- $this->executeList($stockIds);
- }
- /**
- * @param int $stockId
- * @return void
- */
- public function executeRow(int $stockId)
- {
- $this->executeList([$stockId]);
- }
- /**
- * @param array $stockIds
- * @return void
- */
- public function executeList(array $stockIds)
- {
- foreach ($stockIds as $stockId) {
- if ($this->defaultStockProvider->getId() === (int)$stockId) {
- continue;
- }
- $replicaIndexName = $this->indexNameBuilder
- ->setIndexId(InventoryIndexer::INDEXER_ID)
- ->addDimension('stock_', (string)$stockId)
- ->setAlias(Alias::ALIAS_REPLICA)
- ->build();
- $mainIndexName = $this->indexNameBuilder
- ->setIndexId(InventoryIndexer::INDEXER_ID)
- ->addDimension('stock_', (string)$stockId)
- ->setAlias(Alias::ALIAS_MAIN)
- ->build();
- $this->indexStructure->delete($replicaIndexName, ResourceConnection::DEFAULT_CONNECTION);
- $this->indexStructure->create($replicaIndexName, ResourceConnection::DEFAULT_CONNECTION);
- if (!$this->indexStructure->isExist($mainIndexName, ResourceConnection::DEFAULT_CONNECTION)) {
- $this->indexStructure->create($mainIndexName, ResourceConnection::DEFAULT_CONNECTION);
- }
- $this->indexHandler->saveIndex(
- $replicaIndexName,
- $this->indexDataProviderByStockId->execute((int)$stockId),
- ResourceConnection::DEFAULT_CONNECTION
- );
- $this->indexTableSwitcher->switch($mainIndexName, ResourceConnection::DEFAULT_CONNECTION);
- $this->indexStructure->delete($replicaIndexName, ResourceConnection::DEFAULT_CONNECTION);
- }
- }
- }
|