Glue API - Configurable Bundle feature integration

Edit on GitHub

This document describes how to integrate the Configurable Bundle feature.

Prerequisites

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

FEATURE VERSION INTEGRATION GUIDE
Spryker Core 202108.0 Glue API: Spryker Core feature integration
Configurable Bundles 202108.0 Configurable Bundle feature integration
Order Management 202108.0 Glue API: Order Management feature integration

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 INTEGRATION GUIDE
Glue API: Configurable Bundle + Cart Feature Glue API: Configurable Bundle + Cart feature integration
Glue API: Configurable Bundle + Product Feature Glue API: Configurable Bundle + Product feature integration