Glue API - Inventory Management feature integration

Edit on GitHub

This document describes how to install the Inventory Management feature API into a Spryker project.

Prerequisites

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

NAME VERSION INTEGRATION GUIDE
Spryker Core 202108.0 Glue API: Spryker Core feature integration
Product 202108.0 Glue API: Products feature integration
Inventory Management 202108.0

1) Install the required modules using Composer

Install the required modules:

composer require spryker/product-availabilities-rest-api:"^2.0.0" --update-with-dependencies
Verification

Make sure that the following modules have been installed:

MODULE EXPECTED DIRECTORY
ProductAvailabilitiesRestApi vendor/spryker/product-availabilities-rest-api
ProductsRestApi vendor/spryker/products-rest-api

2) Set up transfer objects

Run the following command 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) Enable resources and relationships

Activate the following plugins:

PLUGIN SPECIFICATION PREREQUISITES NAMESPACE
AbstractProductAvailabilitiesRoutePlugin Registers the abstract product availabilities resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin
ConcreteProductAvailabilitiesRoutePlugin Registers the concrete product availabilities resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin
AbstractProductAvailabilitiesByResourceIdResourceRelationshipPlugin Adds the abstract product availability resource as a relationship to the abstract product resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\GlueApplication
ConcreteProductAvailabilitiesByResourceIdResourceRelationshipPlugin Adds the concrete product availability resource as a relationship to the concrete product resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\GlueApplication
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\ProductAvailabilitiesRestApi\Plugin\GlueApplication\AbstractProductAvailabilitiesByResourceIdResourceRelationshipPlugin;
use Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\GlueApplication\ConcreteProductAvailabilitiesByResourceIdResourceRelationshipPlugin;
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 AbstractProductAvailabilitiesByResourceIdResourceRelationshipPlugin()
        );
        $resourceRelationshipCollection->addRelationship(
            ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS,
            new ConcreteProductAvailabilitiesByResourceIdResourceRelationshipPlugin()
        );

        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 the GET http://mysprykershop.com/abstract-products/{{abstract_sku}}?include=abstract-product-availabilities and make sure that the response includes relationships to the abstract-product-availabilities resource.

Send the GET http://mysprykershop.com/concrete-products/{{concrete_sku}}?include=concrete-product-availabilities and make sure that the response includes relationships to the concrete-product-availabilities resource.