Install the Product Bundle + Cart Glue API
Edit on GitHubFollow the steps below to integrate the Glue API: Product Bundle + Cart feature.
Prerequisites
To start the feature integration, overview and install the necessary features:
NAME | VERSION | INSTALLATION GUIDE |
---|---|---|
Spryker Core | 202404.0 | Install the Spryker Core Glue API |
Product Bundles | 202404.0 | Install the Product Bundles feature |
Cart | 202404.0 | Install the Cart Glue API |
1) Install the required modules
Run the following command to install the required modules:
composer require spryker/product-bundle-carts-rest-api:"^1.0.0" --update-with-dependencies
Ensure that the following module has been installed:
Module | Expected Directory |
---|---|
ProductBundleCartsRestApi | vendor/spryker/product-bundle-carts-rest-api |
2) Set up transfer objects
console transfer:generate
Ensure that the following changes have been applied in the transfer objects:
Transfer | Type | Event | Path |
---|---|---|---|
RestErrorMessageTransfer | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer |
ItemTransfer | class | created | src/Generated/Shared/Transfer/ItemTransfer |
RestCalculatedDiscountTransfer | class | created | src/Generated/Shared/Transfer/RestCalculatedDiscountTransfer |
ProductBundleStorageCriteriaTransfer | class | created | src/Generated/Shared/Transfer/ProductBundleStorageCriteriaTransfer |
RestItemsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestItemsAttributesTransfer |
RestCartItemCalculationsTransfer | class | created | src/Generated/Shared/Transfer/RestCartItemCalculationsTransfer |
QuoteTransfer | class | created | src/Generated/Shared/Transfer/QuoteTransfer |
CartItemRequestTransfer | class | created | src/Generated/Shared/Transfer/CartItemRequestTransfer |
3) Set up behavior
Activate the following plugins:
Plugin | Specification | Prerequisites | Namespace |
---|---|---|---|
ProductBundleCartItemFilterPlugin | Filters bundle items off the list of simple cart items. | None | Spryker\Glue\ProductBundleCartsRestApi\Plugin\CartsRestApi |
BundleItemByQuoteResourceRelationshipPlugin | Adds the bundle-items resource as a relationship by QuoteTransfer provided as a payload. |
None | Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication |
BundledItemByQuoteResourceRelationshipPlugin | Adds the bundled-items resource as a relationship to the bundle-items resource. Uses theQuoteTransfer payload of the bundle-items resource. |
None | Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication |
GuestBundleItemByQuoteResourceRelationshipPlugin | Adds the bundle-items resource as a relationship if QuoteTransfer is provided as a payload. It should be used for the guest-carts parent resource. |
None | Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication |
BundleItemQuoteItemReadValidatorPlugin | Checks if CartItemRequestTransfer is a bundle item in QuoteTransfer before performing update or delete operations on it. |
None | Spryker\Zed\ProductBundleCartsRestApi\Communication\Plugin |
src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php
<?php
namespace Pyz\Glue\GlueApplication;
use Spryker\Glue\CartsRestApi\CartsRestApiConfig;
use Spryker\Glue\CartsRestApi\Plugin\GlueApplication\GuestCartItemsByQuoteResourceRelationshipPlugin;
use Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface;
use Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication\BundleItemByQuoteResourceRelationshipPlugin;
use Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication\BundledItemByQuoteResourceRelationshipPlugin;
use Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication\GuestBundleItemByQuoteResourceRelationshipPlugin;
use Spryker\Glue\ProductBundleCartsRestApi\ProductBundleCartsRestApiConfig;
use Spryker\Glue\GlueApplication\GlueApplicationDependencyProvider as SprykerGlueApplicationDependencyProvider;
use Spryker\Glue\ProductsRestApi\Plugin\GlueApplication\ConcreteProductBySkuResourceRelationshipPlugin;
class GlueApplicationDependencyProvider extends SprykerGlueApplicationDependencyProvider
{
/**
* @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection
*
* @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface
*/
protected function getResourceRelationshipPlugins(
ResourceRelationshipCollectionInterface $resourceRelationshipCollection
): ResourceRelationshipCollectionInterface {
$resourceRelationshipCollection->addRelationship(
CartsRestApiConfig::RESOURCE_CARTS,
new BundleItemByQuoteResourceRelationshipPlugin()
);
$resourceRelationshipCollection->addRelationship(
CartsRestApiConfig::RESOURCE_GUEST_CARTS,
new GuestBundleItemByQuoteResourceRelationshipPlugin()
);
$resourceRelationshipCollection->addRelationship(
ProductBundleCartsRestApiConfig::RESOURCE_BUNDLE_ITEMS,
new BundledItemByQuoteResourceRelationshipPlugin()
);
$resourceRelationshipCollection->addRelationship(
ProductBundleCartsRestApiConfig::RESOURCE_BUNDLE_ITEMS,
new ConcreteProductBySkuResourceRelationshipPlugin()
);
$resourceRelationshipCollection->addRelationship(
ProductBundleCartsRestApiConfig::RESOURCE_BUNDLED_ITEMS,
new ConcreteProductBySkuResourceRelationshipPlugin()
);
$resourceRelationshipCollection->addRelationship(
CartsRestApiConfig::RESOURCE_GUEST_CARTS,
new GuestCartItemsByQuoteResourceRelationshipPlugin()
);
return $resourceRelationshipCollection;
}
}
Ensure that you have activated the plugins:
REQUEST | TEST |
---|---|
GET https://glue.mysprykershop.com/carts/{{uuid}}?include=bundle-items GET https://glue.mysprykershop.com/guest-carts/{{uuid}}?include=bundle-items |
The bundle-items resource is returned as a relationship. |
GET https://glue.mysprykershop.com/carts/{{uuid}}?include=bundle-items,bundled-items GET https://glue.mysprykershop.com/guest-carts/{{uuid}}?include=bundle-items,bundled-items |
The bundle-items resource has a relationship of the bundled-items resource. |
GET https://glue.mysprykershop.com/carts/{{uuid}}?include=bundle-items,bundled-items,concrete-products GET https://glue.mysprykershop.com/guest-carts/{{uuid}}?include=bundle-items,bundled-items,concrete-products |
Concrete products are returned as relationships for bundle items and bundled items. |
src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php
<?php
namespace Pyz\Glue\CartsRestApi;
use Spryker\Glue\CartsRestApi\CartsRestApiDependencyProvider as SprykerCartsRestApiDependencyProvider;
use Spryker\Glue\ProductBundleCartsRestApi\Plugin\CartsRestApi\ProductBundleCartItemFilterPlugin;
class CartsRestApiDependencyProvider extends SprykerCartsRestApiDependencyProvider
{
/**
* @return \Spryker\Glue\CartsRestApiExtension\Dependency\Plugin\CartItemFilterPluginInterface[]
*/
protected function getCartItemFilterPlugins(): array
{
return [
new ProductBundleCartItemFilterPlugin(),
];
}
}
Ensure that you have activated the plugins:
-
Add one or more bundle items to cart.
-
Send the request:
GET https://glue.mysprykershop.com/carts/:uuid?include=items
. -
Check that the items of the bundle are not displayed as an
items
relationship.
src/Pyz/Zed/CartsRestApi/CartsRestApiDependencyProvider.php
<?php
namespace Pyz\Zed\CartsRestApi;
use Spryker\Zed\CartsRestApi\CartsRestApiDependencyProvider as SprykerCartsRestApiDependencyProvider;
use Spryker\Glue\ProductBundleCartsRestApi\Plugin\CartsRestApi\ProductBundleCartItemFilterPlugin;
class CartsRestApiDependencyProvider extends SprykerCartsRestApiDependencyProvider
{
/**
* @return \Spryker\Zed\CartsRestApiExtension\Dependency\Plugin\QuoteItemReadValidatorPluginInterface[]
*/
protected function getQuoteItemReadValidatorPlugins(): array
{
return [
new BundleItemQuoteItemReadValidatorPlugin(),
];
}
}
Ensure that you can:
- Edit bundle item quantity:
PATCH https://glue.mysprykershop.com/carts/{{uuid}}/items/{{bundleItemGroupKey}}
. - Delete a bundle from cart:
DELETE https://glue.mysprykershop.com/carts/{{uuid}}/items/{{bundleItemGroupKey}}
.
Install related features
Integrate the following related features:
FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE |
---|---|---|
Products | ✓ | Install the Product Glue API |
Product Bundles | ✓ | Install the Product Bundles Glue API |
Thank you!
For submitting the form