Skip to content

Commit

Permalink
[API][Product] Add defaultVariant field to the Swagger schema
Browse files Browse the repository at this point in the history
  • Loading branch information
GSadee committed May 19, 2021
1 parent a0d7e4f commit c3ff2c1
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 35 deletions.
35 changes: 0 additions & 35 deletions src/Sylius/Bundle/ApiBundle/Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,41 +31,6 @@
<argument type="service" id="api_platform.iri_converter" />
</service>

<service
id="sylius.api.swagger_admin_authentication_documentation_normalizer"
class="Sylius\Bundle\ApiBundle\Swagger\AdminAuthenticationTokenDocumentationNormalizer"
decorates="api_platform.swagger.normalizer.documentation"
public="true"
autoconfigure="false"
decoration-priority="20"
>
<argument type="service" id="sylius.api.swagger_admin_authentication_documentation_normalizer.inner" />
<argument>%sylius.security.new_api_route%</argument>
</service>

<service
id="sylius.api.swagger_shop_authentication_documentation_normalizer"
class="Sylius\Bundle\ApiBundle\Swagger\ShopAuthenticationTokenDocumentationNormalizer"
decorates="api_platform.swagger.normalizer.documentation"
public="true"
autoconfigure="false"
decoration-priority="10"
>
<argument type="service" id="sylius.api.swagger_shop_authentication_documentation_normalizer.inner" />
<argument>%sylius.security.new_api_route%</argument>
</service>

<service
id="sylius.api.swagger_product_variant_documentation_normalizer"
class="Sylius\Bundle\ApiBundle\Swagger\ProductVariantDocumentationNormalizer"
decorates="api_platform.swagger.normalizer.documentation"
public="true"
autoconfigure="false"
decoration-priority="20"
>
<argument type="service" id="sylius.api.swagger_product_variant_documentation_normalizer.inner" />
</service>

<service id="api_platform.swagger.action.ui" class="Sylius\Bundle\ApiBundle\ApiPlatform\Bridge\Symfony\Bundle\Action\SwaggerUiAction" public="true">
<argument type="service" id="api_platform.metadata.resource.name_collection_factory" />
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
Expand Down
64 changes: 64 additions & 0 deletions src/Sylius/Bundle/ApiBundle/Resources/config/services/swagger.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>

<!--
This file is part of the Sylius package.
(c) Paweł Jędrzejewski
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
-->

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"
>
<services>
<service
id="sylius.api.swagger_admin_authentication_documentation_normalizer"
class="Sylius\Bundle\ApiBundle\Swagger\AdminAuthenticationTokenDocumentationNormalizer"
decorates="api_platform.swagger.normalizer.documentation"
public="true"
autoconfigure="false"
decoration-priority="20"
>
<argument type="service" id="sylius.api.swagger_admin_authentication_documentation_normalizer.inner" />
<argument>%sylius.security.new_api_route%</argument>
</service>

<service
id="sylius.api.swagger_shop_authentication_documentation_normalizer"
class="Sylius\Bundle\ApiBundle\Swagger\ShopAuthenticationTokenDocumentationNormalizer"
decorates="api_platform.swagger.normalizer.documentation"
public="true"
autoconfigure="false"
decoration-priority="10"
>
<argument type="service" id="sylius.api.swagger_shop_authentication_documentation_normalizer.inner" />
<argument>%sylius.security.new_api_route%</argument>
</service>

<service
id="Sylius\Bundle\ApiBundle\Swagger\ProductDocumentationNormalizer"
decorates="api_platform.swagger.normalizer.documentation"
public="true"
autoconfigure="false"
decoration-priority="20"
>
<argument type="service" id=".inner" />
</service>

<service
id="sylius.api.swagger_product_variant_documentation_normalizer"
class="Sylius\Bundle\ApiBundle\Swagger\ProductVariantDocumentationNormalizer"
decorates="api_platform.swagger.normalizer.documentation"
public="true"
autoconfigure="false"
decoration-priority="20"
>
<argument type="service" id="sylius.api.swagger_product_variant_documentation_normalizer.inner" />
</service>
</services>
</container>
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace Sylius\Bundle\ApiBundle\Swagger;

use Symfony\Component\Serializer\Normalizer\NormalizerInterface;

/** @experimental */
final class ProductDocumentationNormalizer implements NormalizerInterface
{
/** @var NormalizerInterface */
private $decoratedNormalizer;

public function __construct(NormalizerInterface $decoratedNormalizer)
{
$this->decoratedNormalizer = $decoratedNormalizer;
}

public function supportsNormalization($data, $format = null)
{
return $this->decoratedNormalizer->supportsNormalization($data, $format);
}

public function normalize($object, $format = null, array $context = [])
{
$docs = $this->decoratedNormalizer->normalize($object, $format, $context);

$defaultVariantSchema = [
'type' => 'string',
'format' => 'iri-reference',
'nullable' => true,
'readOnly' => true,
];

$docs['components']['schemas']['Product.jsonld-admin.product.read']['properties']['defaultVariant'] = $defaultVariantSchema;
$docs['components']['schemas']['Product.jsonld-shop.product.read']['properties']['defaultVariant'] = $defaultVariantSchema;

return $docs;
}
}

0 comments on commit c3ff2c1

Please sign in to comment.