Skip to content

Commit 2e74cc1

Browse files
committed
GraphQl-93: Implement support for variables in query
-- Builds fixes
1 parent b3c194f commit 2e74cc1

File tree

9 files changed

+89
-61
lines changed

9 files changed

+89
-61
lines changed

dev/tests/api-functional/testsuite/Magento/GraphQl/VariablesSupportQueryTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77

88
namespace Magento\GraphQl;
99

10-
use Magento\Catalog\Api\Data\ProductInterface;
10+
use Magento\TestFramework\Helper\Bootstrap;
1111
use Magento\TestFramework\TestCase\GraphQlAbstract;
12-
use Magento\TestFramework\ObjectManager;
1312
use Magento\Catalog\Api\ProductRepositoryInterface;
1413

1514
class VariablesSupportQueryTest extends GraphQlAbstract
@@ -21,7 +20,7 @@ class VariablesSupportQueryTest extends GraphQlAbstract
2120

2221
protected function setUp()
2322
{
24-
$this->productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class);
23+
$this->productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class);
2524
}
2625

2726
/**

lib/internal/Magento/Framework/GraphQl/Config.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public function getConfigElement(string $configElementName) : ConfigElementInter
6262
$fieldsInQuery = $this->queryFields->getFieldsUsedInQuery();
6363
if (isset($data['fields'])) {
6464
if (!empty($fieldsInQuery)) {
65-
foreach ($data['fields'] as $fieldName => $fieldConfig) {
65+
foreach (array_keys($data['fields']) as $fieldName) {
6666
if (!isset($fieldsInQuery[$fieldName])) {
6767
unset($data['fields'][$fieldName]);
6868
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\GraphQl\Config\Element;
9+
10+
/**
11+
* Fields object factory
12+
*/
13+
class FieldsFactory
14+
{
15+
/**
16+
* @var ArgumentFactory
17+
*/
18+
private $argumentFactory;
19+
20+
/**
21+
* @var FieldFactory
22+
*/
23+
private $fieldFactory;
24+
25+
/**
26+
* @param ArgumentFactory $argumentFactory
27+
* @param FieldFactory $fieldFactory
28+
*/
29+
public function __construct(
30+
ArgumentFactory $argumentFactory,
31+
FieldFactory $fieldFactory
32+
) {
33+
$this->argumentFactory = $argumentFactory;
34+
$this->fieldFactory = $fieldFactory;
35+
}
36+
37+
/**
38+
* Create a fields object from a configured array with optional arguments.
39+
*
40+
* Field data must contain name and type. Other values are optional and include required, itemType, description,
41+
* and resolver. Arguments array must be in the format of [$argumentData['name'] => $argumentData].
42+
*
43+
* @param array $fieldsData
44+
* @return Field[]
45+
*/
46+
public function createFromConfigData(
47+
array $fieldsData
48+
) : array {
49+
$fields = [];
50+
foreach ($fieldsData as $fieldData) {
51+
$arguments = [];
52+
foreach ($fieldData['arguments'] as $argumentData) {
53+
$arguments[$argumentData['name']] = $this->argumentFactory->createFromConfigData($argumentData);
54+
}
55+
$fields[$fieldData['name']] = $this->fieldFactory->createFromConfigData(
56+
$fieldData,
57+
$arguments
58+
);
59+
}
60+
return $fields;
61+
}
62+
}

lib/internal/Magento/Framework/GraphQl/Config/Element/InputFactory.php

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,20 @@ class InputFactory implements ConfigElementFactoryInterface
2222
private $objectManager;
2323

2424
/**
25-
* @var ArgumentFactory
25+
* @var FieldsFactory
2626
*/
27-
private $argumentFactory;
28-
29-
/**
30-
* @var FieldFactory
31-
*/
32-
private $fieldFactory;
27+
private $fieldsFactory;
3328

3429
/**
3530
* @param ObjectManagerInterface $objectManager
36-
* @param ArgumentFactory $argumentFactory
37-
* @param FieldFactory $fieldFactory
31+
* @param FieldsFactory $fieldsFactory
3832
*/
3933
public function __construct(
4034
ObjectManagerInterface $objectManager,
41-
ArgumentFactory $argumentFactory,
42-
FieldFactory $fieldFactory
35+
FieldsFactory $fieldsFactory
4336
) {
4437
$this->objectManager = $objectManager;
45-
$this->argumentFactory = $argumentFactory;
46-
$this->fieldFactory = $fieldFactory;
38+
$this->fieldsFactory = $fieldsFactory;
4739
}
4840

4941
/**
@@ -54,18 +46,8 @@ public function __construct(
5446
*/
5547
public function createFromConfigData(array $data): ConfigElementInterface
5648
{
57-
$fields = [];
58-
$data['fields'] = isset($data['fields']) ? $data['fields'] : [];
59-
foreach ($data['fields'] as $field) {
60-
$arguments = [];
61-
foreach ($field['arguments'] as $argument) {
62-
$arguments[$argument['name']] = $this->argumentFactory->createFromConfigData($argument);
63-
}
64-
$fields[$field['name']] = $this->fieldFactory->createFromConfigData(
65-
$field,
66-
$arguments
67-
);
68-
}
49+
$fields = isset($data['fields']) ? $this->fieldsFactory->createFromConfigData($data['fields']) : [];
50+
6951
return $this->create(
7052
$data,
7153
$fields

lib/internal/Magento/Framework/GraphQl/Config/Element/TypeFactory.php

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,20 @@ class TypeFactory implements ConfigElementFactoryInterface
2222
private $objectManager;
2323

2424
/**
25-
* @var ArgumentFactory
25+
* @var FieldsFactory
2626
*/
27-
private $argumentFactory;
28-
29-
/**
30-
* @var FieldFactory
31-
*/
32-
private $fieldFactory;
27+
private $fieldsFactory;
3328

3429
/**
3530
* @param ObjectManagerInterface $objectManager
36-
* @param ArgumentFactory $argumentFactory
37-
* @param FieldFactory $fieldFactory
31+
* @param FieldsFactory $fieldsFactory
3832
*/
3933
public function __construct(
4034
ObjectManagerInterface $objectManager,
41-
ArgumentFactory $argumentFactory,
42-
FieldFactory $fieldFactory
35+
FieldsFactory $fieldsFactory
4336
) {
4437
$this->objectManager = $objectManager;
45-
$this->argumentFactory = $argumentFactory;
46-
$this->fieldFactory = $fieldFactory;
38+
$this->fieldsFactory = $fieldsFactory;
4739
}
4840

4941
/**
@@ -54,18 +46,8 @@ public function __construct(
5446
*/
5547
public function createFromConfigData(array $data): ConfigElementInterface
5648
{
57-
$fields = [];
58-
$data['fields'] = isset($data['fields']) ? $data['fields'] : [];
59-
foreach ($data['fields'] as $field) {
60-
$arguments = [];
61-
foreach ($field['arguments'] as $argument) {
62-
$arguments[$argument['name']] = $this->argumentFactory->createFromConfigData($argument);
63-
}
64-
$fields[$field['name']] = $this->fieldFactory->createFromConfigData(
65-
$field,
66-
$arguments
67-
);
68-
}
49+
$fields = isset($data['fields']) ? $this->fieldsFactory->createFromConfigData($data['fields']) : [];
50+
6951
return $this->create(
7052
$data,
7153
$fields

lib/internal/Magento/Framework/GraphQl/Query/Fields.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function setQuery($query, array $variables = null)
4444
]
4545
);
4646
if (isset($variables)) {
47-
$queryFields = array_merge($queryFields, $this->extracttVariables($variables));
47+
$queryFields = array_merge($queryFields, $this->extractVariables($variables));
4848
}
4949
} catch (\Exception $e) {
5050
// If a syntax error is encountered do not collect fields
@@ -75,12 +75,12 @@ public function getFieldsUsedInQuery()
7575
*
7676
* @return string[]
7777
*/
78-
private function extracttVariables(array $variables): array
78+
private function extractVariables(array $variables): array
7979
{
8080
$fields = [];
81-
foreach ($variables as $key => $value){
81+
foreach ($variables as $key => $value) {
8282
if (is_array($value)){
83-
$fields = array_merge($fields, $this->extracttVariables($value));
83+
$fields = array_merge($fields, $this->extractVariables($value));
8484
}
8585
$fields[$key] = $key;
8686
}

lib/internal/Magento/Framework/GraphQl/Schema/SchemaGenerator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function __construct(
4848
}
4949

5050
/**
51-
* {@inheritdoc}
51+
* @inheritdoc
5252
*/
5353
public function generate() : Schema
5454
{
@@ -61,7 +61,7 @@ public function generate() : Schema
6161
},
6262
'types' => function () {
6363
$typesImplementors = [];
64-
foreach ($this->config->getDeclaredTypeNames() as $type) {
64+
foreach ($this->config->getDeclaredTypes() as $type) {
6565
$typesImplementors [] = $this->typeRegistry->get($type['name']);
6666
}
6767
return $typesImplementors;

lib/internal/Magento/Framework/GraphQl/Schema/Type/Input/InputMapper.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
use Magento\Framework\GraphQl\Schema\Type\ScalarTypes;
1414
use Magento\Framework\GraphQl\Schema\Type\TypeRegistry;
1515

16+
/**
17+
* Prepare argument's metadata for GraphQL schema generation
18+
*/
1619
class InputMapper
1720
{
1821
/**

lib/internal/Magento/Framework/GraphQl/Schema/Type/Output/ElementMapper/Formatter/Fields.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function __construct(
7979
}
8080

8181
/**
82-
* {@inheritDoc}
82+
* @inheritdoc
8383
*/
8484
public function format(TypeInterface $configElement, OutputTypeInterface $outputType): array
8585
{

0 commit comments

Comments
 (0)