Glue API - Product Availability feature integration

Edit on GitHub

Install feature API

Prerequisites

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

Name Version
Spryker Core 2018.12.0
Product Management 2018.12.0
Availability 2018.12.0
ProductsRestApi 2.2.3

1) Install the required modules using Composer

Run the following commands to install the required modules:

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

Make sure that the following modules are 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 in transfer objects are present:

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 the abstract product availabilities resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin
ConcreteProductAvailabilitiesRoutePlugin Registers the concrete product availabilities resource. None Spryker\Glue\ProductAvailabilitiesRestApi\Plugin
AbstractProductAvailabilitiesResourceRelationshipPlugin Adds the abstract product availability resource as a relationship to the abstract product resource. None Spryker\Glue\ProductsProductAvailabilitiesResourceRelationship\Plugin
ConcreteProductAvailabilitiesResourceRelationshipPlugin Adds the concrete product availability resource as a relationship to the 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\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
Verification
Make 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.
Verification
Make 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.