Glue API - Configurable Bundle feature integration

Edit on GitHub

This document describes how to install the Configurable Bundle feature.

Prerequisites

To start the feature integration, overview and install the necessary features:

FEATURE VERSION INSTALLATION GUIDE
Spryker Core 202311.0 Install the Spryker Core Glue API
Configurable Bundles 202311.0 Configurable Bundle feature integration
Order Management 202311.0 Install the Order Management Glue API

1) Install the required modules using Composer

Install the required modules:

composer require spryker/configurable-bundles-rest-api:"^1.0.0" --update-with-dependencies
Verification

Make sure that the following module has been installed:

MODULE EXPECTED DIRECTORY
ConfigurableBundlesRestApi vendor/spryker/configurable-bundles-rest-api

2) Set up transfer objects

Set up transfer objects:

console transfer:generate
Verification

Make sure that the following changes have been applied in transfer objects:

TRANSFER TYPE EVENT PATH
RestConfigurableBundleTemplatesAttributesTransfer class created src/Generated/Shared/Transfer/RestConfigurableBundleTemplatesAttributesTransfer
RestConfigurableBundleTemplateSlotsAttributesTransfer class created src/Generated/Shared/Transfer/RestConfigurableBundleTemplateSlotsAttributesTransfer
RestConfigurableBundleTemplateImageSetsAttributesTransfer class created src/Generated/Shared/Transfer/RestConfigurableBundleTemplateImageSetsAttributesTransfer
RestConfigurableBundleImagesAttributesTransfer class created src/Generated/Shared/Transfer/RestConfigurableBundleImagesAttributesTransfer
RestErrorMessageTransfer class created src/Generated/Shared/Transfer/RestErrorMessageTransfer
ConfigurableBundleTemplateStorageTransfer class created src/Generated/Shared/Transfer/ConfigurableBundleTemplateStorageTransfer
ConfigurableBundleTemplateSlotStorageTransfer class created src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotStorageTransfer
ProductImageSetStorageTransfer class created src/Generated/Shared/Transfer/ProductImageSetStorageTransfer
ProductImageStorageTransfer class created src/Generated/Shared/Transfer/ProductImageStorageTransfer
ConfigurableBundleTemplatePageSearchRequestTransfer class created src/Generated/Shared/Transfer/ConfigurableBundleTemplatePageSearchRequestTransfer
ConfigurableBundleTemplateStorageFilterTransfer class created src/Generated/Shared/Transfer/ConfigurableBundleTemplateStorageFilterTransfer
ItemTransfer.salesOrderConfiguredBundle property created src/Generated/Shared/Transfer/ItemTransfer
ItemTransfer.salesOrderConfiguredBundleItem property created src/Generated/Shared/Transfer/ItemTransfer
RestSalesOrderConfiguredBundleTransfer class created src/Generated/Shared/Transfer/RestSalesOrderConfiguredBundleTransfer
RestSalesOrderConfiguredBundleItemTransfer class created src/Generated/Shared/Transfer/RestSalesOrderConfiguredBundleItemTransfer
RestOrderItemsAttributesTransfer.salesOrderConfiguredBundle property created src/Generated/Shared/Transfer/RestOrderItemsAttributesTransfer
SalesOrderConfiguredBundleTransfer class created src/Generated/Shared/Transfer/SalesOrderConfiguredBundleTransfer
SalesOrderConfiguredBundleTranslationTransfer class created src/Generated/Shared/Transfer/SalesOrderConfiguredBundleTranslationTransfer
SalesOrderConfiguredBundleItemTransfer class created src/Generated/Shared/Transfer/SalesOrderConfiguredBundleItemTransfer

3) Set up behavior

Activate the following plugins:

PLUGIN SPECIFICATION PREREQUISITES NAMESPACE
ConfigurableBundleTemplateSlotByConfigurableBundleTemplateResourceRelationshipPlugin Adds configurable-bundle-template-slots resource as a relationship by configurable bundle template. None Spryker\Glue\ConfigurableBundlesRestApi\Plugin\GlueApplication
ConfigurableBundleTemplateImageSetByConfigurableBundleTemplateResourceRelationshipPlugin Adds configurable-bundle-template-image-sets resource as a relationship by configurable bundle template. None Spryker\Glue\ConfigurableBundlesRestApi\Plugin\GlueApplication
ConfigurableBundleTemplatesResourceRoutePlugin Provides the /configurable-bundle-templates resource route. None Spryker\Glue\ConfigurableBundlesRestApi\Plugin\GlueApplication
SalesConfiguredBundleRestOrderItemsAttributesMapperPlugin Maps the additional information from theItemTransfer to RestOrderItemsAttributesTransfer. None Spryker\Glue\ConfigurableBundlesRestApi\Plugin\OrdersRestApi
src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php
<?php

namespace Pyz\Glue\GlueApplication;

use Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface;
use Spryker\Glue\ConfigurableBundlesRestApi\Plugin\GlueApplication\ConfigurableBundleTemplatesResourceRoutePlugin;
use Spryker\Glue\GlueApplication\GlueApplicationDependencyProvider as SprykerGlueApplicationDependencyProvider;
use Spryker\Glue\ConfigurableBundlesRestApi\ConfigurableBundlesRestApiConfig;
use Spryker\Glue\ConfigurableBundlesRestApi\Plugin\GlueApplication\ConfigurableBundleTemplateImageSetByConfigurableBundleTemplateResourceRelationshipPlugin;
use Spryker\Glue\ConfigurableBundlesRestApi\Plugin\GlueApplication\ConfigurableBundleTemplateSlotByConfigurableBundleTemplateResourceRelationshipPlugin;

class GlueApplicationDependencyProvider extends SprykerGlueApplicationDependencyProvider
{
    /**
     * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRoutePluginInterface[]
     */
    protected function getResourceRoutePlugins(): array
    {
        return [
            new ConfigurableBundleTemplatesResourceRoutePlugin(),
        ];
    }

    /**
     * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection
     *
     * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface
     */
    protected function getResourceRelationshipPlugins(
        ResourceRelationshipCollectionInterface $resourceRelationshipCollection
    ): ResourceRelationshipCollectionInterface {
        $resourceRelationshipCollection->addRelationship(
            ConfigurableBundlesRestApiConfig::RESOURCE_CONFIGURABLE_BUNDLE_TEMPLATES,
            new ConfigurableBundleTemplateSlotByConfigurableBundleTemplateResourceRelationshipPlugin()
        );

        $resourceRelationshipCollection->addRelationship(
            ConfigurableBundlesRestApiConfig::RESOURCE_CONFIGURABLE_BUNDLE_TEMPLATES,
            new ConfigurableBundleTemplateImageSetByConfigurableBundleTemplateResourceRelationshipPlugin()
        );

        return $resourceRelationshipCollection;
    }
}
Verification

Make sure that:

  • The /configurable-bundle-templates resource is available by sending the request: GET https://glue.mysprykershop.com/configurable-bundle-templates.
  • Each configurable-bundle-template resource has a relationship to configurable-bundle-template-slots by sending the request:  GET https://glue.mysprykershop.com/configurable-bundle-templates?include=configurable-bundle-template-slots.
  • Each configurable-bundle-template resource has a relationship to configurable-bundle-template-image-sets by sending the request:GET https://glue.mysprykershop.com/configurable-bundle-templates?include=configurable-bundle-template-image-sets.

src/Pyz/Glue/OrdersRestApi/OrdersRestApiDependencyProvider.php

<?php

namespace Pyz\Glue\OrdersRestApi;

use Spryker\Glue\ConfigurableBundlesRestApi\Plugin\OrdersRestApi\SalesConfiguredBundleRestOrderItemsAttributesMapperPlugin;
use Spryker\Glue\OrdersRestApi\OrdersRestApiDependencyProvider as SprykerOrdersRestApiDependencyProvider;

class OrdersRestApiDependencyProvider extends SprykerOrdersRestApiDependencyProvider
{
    /**
     * @return \Spryker\Glue\OrdersRestApiExtension\Dependency\Plugin\RestOrderItemsAttributesMapperPluginInterface[]
     */
    protected function getRestOrderItemsAttributesMapperPlugins(): array
    {
        return [
            new SalesConfiguredBundleRestOrderItemsAttributesMapperPlugin(),
        ];
    }
}
Verification
  1. Create an order with a configurable bundle.

  2. Retrieve the order by sending the request: GET https://glue.mysprykershop.com/order/:orderReference
    Make sure the endpoint returns the sections: data.attributes.items.salesOrderConfiguredBundle and data.attributes.items.salesOrderConfiguredBundleItem.

Integrate the following related features:

FEATURE REQUIRED FOR THE CURRENT FEATURE INSTALLATION GUIDE
Glue API: Configurable Bundle + Cart Feature Glue API: Configurable Bundle + Cart feature integration
Glue API: Configurable Bundle + Product Feature Install the Configurable Bundle + Product Glue API