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

src/CommercetoolsSubscriptionsApi.php
<?php

namespace Drupal\commercetools;

use GraphQL\Actions\Mutation;
use GraphQL\Actions\Query;
use GraphQL\Entities\Node;
use GraphQL\Entities\Variable;

/**
 * The subscriptions api service.
 */
class CommercetoolsSubscriptionsApi {

  /**
   * CommercetoolsSubscriptionsApi constructor.
   *
   * @param \Drupal\commercetools\CommercetoolsService $ct
   *   The Commercetools service.
   * @param \Drupal\commercetools\CommercetoolsApiServiceInterface $ctApi
   *   The Commercetools API service.
   */
  public function __construct(
    protected CommercetoolsService $ct,
    protected CommercetoolsApiServiceInterface $ctApi,
  ) {
  }

  /**
   * Fetches a subscription by its key.
   *
   * @param string $key
   *   Subscription key.
   *
   * @return array
   *   Subscription data as an associative array.
   */
  public function getSubscriptionByKey(string $key): array {
    $arguments = [
      'key' => new Variable('key', 'String!'),
    ];
    $query = new Query('subscription', $arguments);
    $this->addSubscriptionFields($query);
    $response = $this->ctApi->executeGraphQlOperation($query, ['key' => $key]);
    return (array) $response->getData()['subscription'];
  }

  /**
   * Creates a subscription with the given destination and change topics.
   *
   * @param string $key
   *   Subscription key.
   * @param string $destination
   *   Destination discriminator (e.g., "SQS").
   * @param array $paramsDestination
   *   Destination-specific input payload.
   * @param array $changes
   *   List of resource type IDs to subscribe to.
   *
   * @return array
   *   Created subscription data.
   */
  public function createSubscription(string $key, string $destination, array $paramsDestination, array $changes): array {
    $subscriptionDraft = [
      'key' => $key,
      'destination' => [
        $destination => $paramsDestination,
      ],
    ];

    foreach ($changes as $change) {
      $subscriptionDraft['changes'][] = ['resourceTypeId' => $change];
    }

    $arguments = [
      'draft' => new Variable('draft', 'SubscriptionDraft!'),
    ];
    $subscriptionMutation = new Mutation('createSubscription', $arguments);
    $this->addSubscriptionFields($subscriptionMutation);
    $variables = ['draft' => $subscriptionDraft];
    $response = $this->ctApi->executeGraphQlOperation($subscriptionMutation, $variables);
    return (array) $response->getData()['createSubscription'];
  }

  /**
   * Updates a subscription.
   *
   * @param string $key
   *   Subscription key.
   * @param int $version
   *   Current version.
   * @param array $actions
   *   List of SubscriptionUpdateAction items.
   *
   * @return array
   *   GraphQL response data for the update.
   */
  public function updateSubscription(string $key, int $version, array $actions): array {
    $arguments = [
      'key' => new Variable('key', 'String'),
      'version' => new Variable('version', 'Long!'),
      'actions' => new Variable('actions', '[SubscriptionUpdateAction!]!'),
    ];
    $updateMutation = new Mutation('updateSubscription', $arguments);
    $this->addSubscriptionFields($updateMutation);
    $variables = [
      'key' => $key,
      'version' => $version,
      'actions' => $actions,
    ];
    $response = $this->ctApi->executeGraphQlOperation($updateMutation, $variables);
    return (array) $response->getData()['updateSubscription'];
  }

  /**
   * Deletes a subscription by key and version.
   *
   * @param string $key
   *   Subscription key.
   * @param int $version
   *   Current version.
   *
   * @return array
   *   Deletion result (e.g., deleted entity or identifiers).
   */
  public function deleteSubscription(string $key, int $version): array {
    $arguments = [
      'key' => new Variable('key', 'String'),
      'version' => new Variable('version', 'Long!'),
    ];
    $deleteMutation = new Mutation('deleteSubscription', $arguments);
    $deleteMutation->use('key');
    $variables = [
      'key' => $key,
      'version' => $version,
    ];
    $response = $this->ctApi->executeGraphQlOperation($deleteMutation, $variables);
    return (array) $response->getData()['deleteSubscription'];
  }

  /**
   * Add subscription fields to request node.
   *
   * @param \GraphQL\Entities\Node $subscriptionQuery
   *   The subscription node to which the fields will be added.
   */
  protected function addSubscriptionFields(Node $subscriptionQuery): void {
    $this->ct->addFieldsToNode(
      $subscriptionQuery,
      [
        'id',
        'key',
        'version',
      ],
    );
  }

}

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

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