* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Core\CommandBus\Middleware; use League\Tactician\Handler\CommandNameExtractor\CommandNameExtractor; use League\Tactician\Handler\Locator\HandlerLocator; use League\Tactician\Middleware; use PrestaShop\PrestaShop\Core\CommandBus\ExecutedCommandRegistry; /** * Registers every command that was executed in system */ final class CommandRegisterMiddleware implements Middleware { /** * @var HandlerLocator */ private $handlerLocator; /** * @var CommandNameExtractor */ private $commandNameExtractor; /** * @var ExecutedCommandRegistry */ private $executedCommandRegistry; /** * @param HandlerLocator $handlerLocator * @param CommandNameExtractor $commandNameExtractor * @param ExecutedCommandRegistry $executedCommandRegistry */ public function __construct( HandlerLocator $handlerLocator, CommandNameExtractor $commandNameExtractor, ExecutedCommandRegistry $executedCommandRegistry ) { $this->handlerLocator = $handlerLocator; $this->commandNameExtractor = $commandNameExtractor; $this->executedCommandRegistry = $executedCommandRegistry; } /** * {@inheritdoc} */ public function execute($command, callable $next) { $commandName = $this->commandNameExtractor->extract($command); $handler = $this->handlerLocator->getHandlerForCommand($commandName); $this->executedCommandRegistry->register($command, $handler); return $next($command); } }