Glue API - Inventory Management feature integration

Edit on GitHub

Install feature API

Prerequisites

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

Name Version Integration guide
Glue API: Glue Application 201903.0 Glue Application feature integration
Glue API: Product 201903.0 Product API feature integration
Inventory Management 201903.0

1) Install the required modules using Composer

Run the following command(s) to install the required modules:

composer require spryker/product-availabilities-rest-api:"^1.0.3" spryker/products-product-availabilities-resource-relationship:"^1.0.0" --update-with-dependencies

Verfification

Make sure that the following modules were installed:

Module Expected Directory
ProductAvailabilitiesRestApi vendor/spryker/product-availabilities-rest-api
ProductsProductAvailabilitiesResourceRelationship vendor/spryker/products-product-availabilities-resource-relationship

2) Set up Transfer objects

Run the following commands to generate transfer changes:

console transfer:generate

Verification

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

Transfer Type Event Path
RestAbstractProductAvailabilityAttributesTransfer class created src/Generated/Shared/Transfer/RestAbstractProductAvailabilityAttributesTransfer
RestConcreteProductAvailabilityAttributesTransfer class created src/Generated/Shared/Transfer/RestConcreteProductAvailabilityAttributesTransfer

3) Set up Behavior

Enable resources and relationships

Activate the following plugin:

Plugin Specification Prerequisites Namespace
AbstractProductAvailabilitiesRoutePlugin Registers abstract product availabilities resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin
ConcreteProductAvailabilitiesRoutePlugin Registers concrete product availabilities resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin
AbstractProductAvailabilitiesResourceRelationshipPlugin Adds abstract product availability resource as a relationship to abstract product resource. None Spryker\Glue\ProductsProductAvailabilitiesResourceRelationship\Plugin
ConcreteProductAvailabilitiesResourceRelationshipPlugin Adds concrete product availability resource as a relationship to concrete product resource. None Spryker\Glue\ProductsProductAvailabilitiesResourceRelationship\Plugin
src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php
<?php

namespace Pyz\Glue\GlueApplication;

use Spryker\Glue\GlueApplication\GlueApplicationDependencyProvider as SprykerGlueApplicationDependencyProvider;
use Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface;
use Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\AbstractProductAvailabilitiesRoutePlugin;
use Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\ConcreteProductAvailabilitiesRoutePlugin;
use Spryker\Glue\ProductsProductAvailabilitiesResourceRelationship\Plugin\AbstractProductAvailabilitiesResourceRelationshipPlugin;
use Spryker\Glue\ProductsProductAvailabilitiesResourceRelationship\Plugin\ConcreteProductAvailabilitiesResourceRelationshipPlugin;
use Spryker\Glue\ProductsRestApi\ProductsRestApiConfig;

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

	/**
	* @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection
	*
	* @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface
	*/
	protected function getResourceRelationshipPlugins(
		ResourceRelationshipCollectionInterface $resourceRelationshipCollection
	): ResourceRelationshipCollectionInterface {
		$resourceRelationshipCollection->addRelationship(
			ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS,
			new AbstractProductAvailabilitiesResourceRelationshipPlugin()
		);
		$resourceRelationshipCollection->addRelationship(
			ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS,
			new ConcreteProductAvailabilitiesResourceRelationshipPlugin()
		);

		return $resourceRelationshipCollection;
	}
}

Verification
Make sure that the following endpoints are available:
  • http://mysprykershop.com/abstract-products/{{abstract_sku}}/abstract-product-availabilities
  • http://mysprykershop.com/concrete-products/{{concrete_sku}}/concrete-product-availabilities

Send a request to "http://mysprykershop.com/abstract-products/{{abstract_sku}}?include=abstract-product-availabilities". Make sure that the response includes relationships to the "abstract-product-availabilities" resource.

Send a request to "http://mysprykershop.com/concrete-products/{{concrete_sku}}?include=concrete-product-availabilities". Make sure that the response includes relationships to the "concrete-product-availabilities" resource.