commercetools-8.x-1.2-alpha1/src/CommercetoolsMessageProcessor.php

src/CommercetoolsMessageProcessor.php
<?php

namespace Drupal\commercetools;

use Drupal\commercetools\Cache\CacheableCommercetoolsGraphQlResponse;
use Drupal\commercetools\Event\CommercetoolsMessageEvent;
use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * The Commercetools Message processor event subscriber.
 */
class CommercetoolsMessageProcessor implements EventSubscriberInterface {

  const PROCESSOR_PER_TYPE = [
    /* Product messages */
    'ProductCreated' => 'processProduct',
    'ProductPublished' => 'processProduct',
    'ProductUnpublished' => 'processProduct',
    'ProductStateTransition' => 'processProduct',
    'ProductSlugChanged' => 'processProduct',
    'ProductImageAdded' => 'processProduct',
    'ProductRevertedStagedChanges' => 'processProduct',
    'ProductPriceKeySet' => 'processProduct',
    'ProductPriceDiscountsSet' => 'processProduct',
    'ProductPriceDiscountsSetUpdatedPrice' => 'processProduct',
    'ProductPriceExternalDiscountSet' => 'processProduct',
    'ProductPriceAdded' => 'processProduct',
    'ProductPriceChanged' => 'processProduct',
    'ProductPricesSet' => 'processProduct',
    'ProductPriceRemoved' => 'processProduct',
    'ProductPriceModeSet' => 'processProduct',
    'ProductVariantAdded' => 'processProduct',
    'ProductVariantDeleted' => 'processProduct',
    'ProductAddedToCategory' => 'processProduct',
    'ProductRemovedFromCategory' => 'processProduct',
    'ProductDeleted' => 'processProduct',
    'ProductPriceCustomFieldAdded' => 'processProduct',
    'ProductPriceCustomFieldChanged' => 'processProduct',
    'ProductPriceCustomFieldRemoved' => 'processProduct',
    'ProductPriceCustomFieldsSet' => 'processProduct',
    'ProductPriceCustomFieldsRemoved' => 'processProduct',
  ];

  /**
   * Constructs a new MessageProcessor object.
   *
   * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cacheTagsInvalidator
   *   The cache tags invalidator.
   */
  public function __construct(
    protected CacheTagsInvalidatorInterface $cacheTagsInvalidator,
  ) {
  }

  /**
   * Process the message.
   *
   * @param \Drupal\commercetools\Event\CommercetoolsMessageEvent $event
   *   The message event.
   */
  public function processMessage(CommercetoolsMessageEvent $event) {
    $message = $event->getMessage();
    if ($processor = self::PROCESSOR_PER_TYPE[$message['type']] ?? NULL) {
      $this->$processor($message);
    }
  }

  /**
   * Process the product related messages.
   *
   * @param array $message
   *   The message.
   */
  protected function processProduct($message) {
    $tags = [
      CacheableCommercetoolsGraphQlResponse::CACHE_TAG_PRODUCT_LIST,
    ];
    if ($productId = $message['resourceRef']['id']) {
      $tags[] = CacheableCommercetoolsGraphQlResponse::CACHE_TAG_PRODUCT_PREFIX . $productId;
    }
    $this->cacheTagsInvalidator->invalidateTags($tags);
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents(): array {
    $events[CommercetoolsMessageEvent::class][] = ['processMessage'];
    return $events;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc