Glue API - Configurable Bundle feature integration

Edit on GitHub
You are browsing a previous version of the document. The latest version is 202307.0.

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 202204.0 Glue API: Spryker Core feature integration
Configurable Bundles 202204.0 Configurable Bundle feature integration
Order Management 202204.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