Skip to content

Commit ad02298

Browse files
author
Prabhu Ram
committed
PWA-1319: [EY] Routable Interface in GraphQL
- schema revisions - refactoring - fixed review comments
1 parent 2d775e9 commit ad02298

File tree

16 files changed

+318
-200
lines changed

16 files changed

+318
-200
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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\CatalogGraphQl\DataProvider\UrlRewrite;
9+
10+
use Magento\Catalog\Model\CategoryRepository;
11+
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree as CategoryTreeDataProvider;
12+
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\ExtractDataFromCategoryTree;
13+
use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
14+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
15+
use Magento\UrlRewriteGraphQl\Model\DataProvider\EntityDataProviderInterface;
16+
17+
class CatalogTreeDataProvider implements EntityDataProviderInterface
18+
{
19+
const CATEGORY = 'CATEGORY';
20+
/**
21+
* @var ExtractDataFromCategoryTree
22+
*/
23+
private $extractDataFromCategoryTree;
24+
25+
/**
26+
* @var CategoryTreeDataProvider
27+
*/
28+
private $categoryTree;
29+
30+
/**
31+
* @var CategoryRepository
32+
*/
33+
private $categoryRepository;
34+
35+
/**
36+
* @param CategoryTreeDataProvider $categoryTree
37+
* @param ExtractDataFromCategoryTree $extractDataFromCategoryTree
38+
* @param CategoryRepository $categoryRepository
39+
*/
40+
public function __construct(
41+
CategoryTreeDataProvider $categoryTree,
42+
ExtractDataFromCategoryTree $extractDataFromCategoryTree,
43+
CategoryRepository $categoryRepository
44+
) {
45+
$this->categoryTree = $categoryTree;
46+
$this->extractDataFromCategoryTree = $extractDataFromCategoryTree;
47+
$this->categoryRepository = $categoryRepository;
48+
}
49+
50+
/**
51+
* Get catalog tree data
52+
*
53+
* @param string $entity_type
54+
* @param int $id
55+
* @param ResolveInfo|null $info
56+
* @return array
57+
* @throws GraphQlNoSuchEntityException
58+
*/
59+
public function getData(
60+
string $entity_type,
61+
int $id,
62+
ResolveInfo $info = null
63+
): array {
64+
$categoryId = (int)$id;
65+
$categoriesTree = $this->categoryTree->getTree($info, $categoryId);
66+
if (empty($categoriesTree) || ($categoriesTree->count() == 0)) {
67+
throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist'));
68+
}
69+
$result = current($this->extractDataFromCategoryTree->execute($categoriesTree));
70+
$result['type_id'] = $entity_type;
71+
return $result;
72+
}
73+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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\CatalogGraphQl\DataProvider\UrlRewrite;
9+
10+
use Magento\Catalog\Model\ProductRepository;
11+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
12+
use Magento\UrlRewriteGraphQl\Model\DataProvider\EntityDataProviderInterface;
13+
14+
class ProductDataProvider implements EntityDataProviderInterface
15+
{
16+
/**
17+
* @var ProductRepository
18+
*/
19+
private $productRepository;
20+
21+
/**
22+
* @param ProductRepository $productRepository
23+
*/
24+
public function __construct(
25+
ProductRepository $productRepository
26+
) {
27+
$this->productRepository = $productRepository;
28+
}
29+
30+
/**
31+
* Get product data
32+
*
33+
* @param string $entity_type
34+
* @param int $id
35+
* @param ResolveInfo|null $info
36+
* @return array
37+
* @throws \Magento\Framework\Exception\NoSuchEntityException
38+
*/
39+
public function getData(string $entity_type, int $id, ResolveInfo $info = null): array
40+
{
41+
$product = $this->productRepository->getById($id);
42+
$result = $product->getData();
43+
$result['model'] = $product;
44+
return $result;
45+
}
46+
}

app/code/Magento/CatalogGraphQl/composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
"magento/module-eav-graph-ql": "*",
1414
"magento/module-catalog-search": "*",
1515
"magento/framework": "*",
16-
"magento/module-graph-ql": "*"
16+
"magento/module-graph-ql": "*",
17+
"magento/module-url-rewrite-graph-ql": "*"
1718
},
1819
"suggest": {
1920
"magento/module-graph-ql-cache": "*",

app/code/Magento/CatalogGraphQl/etc/di.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@
7777
</arguments>
7878
</type>
7979

80+
<type name="Magento\UrlRewriteGraphQl\Model\DataProvider\EntityDataProviderComposite">
81+
<arguments>
82+
<argument name="dataProviders" xsi:type="array">
83+
<item name="category" xsi:type="object">Magento\CatalogGraphQl\DataProvider\UrlRewrite\CatalogTreeDataProvider</item>
84+
<item name="product" xsi:type="object">Magento\CatalogGraphQl\DataProvider\UrlRewrite\ProductDataProvider</item>
85+
</argument>
86+
</arguments>
87+
</type>
88+
8089
<type name="Magento\CatalogGraphQl\Plugin\Search\Request\ConfigReader">
8190
<arguments>
8291
<argument name="exactMatchAttributes" xsi:type="array">
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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\CmsGraphQl\Model\DataProvider\UrlRewrite;
9+
10+
use Magento\CmsGraphQl\Model\Resolver\DataProvider\Page as PageDataProvider;
11+
use Magento\Framework\Exception\NoSuchEntityException;
12+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
13+
use Magento\UrlRewriteGraphQl\Model\DataProvider\EntityDataProviderInterface;
14+
15+
class Page implements EntityDataProviderInterface
16+
{
17+
/**
18+
* @var PageDataProvider
19+
*/
20+
private $pageDataProvider;
21+
22+
/**
23+
* Route constructor.
24+
* @param PageDataProvider $pageDataProvider
25+
*/
26+
public function __construct(
27+
PageDataProvider $pageDataProvider
28+
) {
29+
$this->pageDataProvider = $pageDataProvider;
30+
}
31+
32+
/**
33+
* Get Page data
34+
*
35+
* @param string $entity_type
36+
* @param int $id
37+
* @param ResolveInfo|null $info
38+
* @return array
39+
* @throws NoSuchEntityException
40+
*/
41+
public function getData(string $entity_type, int $id, ResolveInfo $info = null): array
42+
{
43+
$result = $this->pageDataProvider->getDataByPageId((int)$id);
44+
$result['type_id'] = $entity_type;
45+
return $result;
46+
}
47+
}

app/code/Magento/CmsGraphQl/composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"magento/framework": "*",
88
"magento/module-cms": "*",
99
"magento/module-widget": "*",
10-
"magento/module-store": "*"
10+
"magento/module-store": "*",
11+
"magento/module-url-rewrite-graph-ql": "*"
1112
},
1213
"suggest": {
1314
"magento/module-graph-ql": "*",
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
9+
<type name="Magento\UrlRewriteGraphQl\Model\DataProvider\EntityDataProviderComposite">
10+
<arguments>
11+
<argument name="dataProviders" xsi:type="array">
12+
<item name="cms_page" xsi:type="object">Magento\CmsGraphQl\Model\DataProvider\UrlRewrite\Page</item>
13+
</argument>
14+
</arguments>
15+
</type>
16+
</config>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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\UrlRewriteGraphQl\Model\DataProvider;
9+
10+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
11+
12+
/**
13+
* Composite class for entity data provider
14+
*/
15+
class EntityDataProviderComposite implements EntityDataProviderInterface
16+
{
17+
/**
18+
* @var EntityDataProviderInterface[]
19+
*/
20+
private $dataProviders;
21+
22+
/**
23+
* @param EntityDataProviderInterface[] $dataProviders
24+
*/
25+
public function __construct(array $dataProviders = [])
26+
{
27+
$this->dataProviders = $dataProviders;
28+
}
29+
30+
/**
31+
* Get data from provider
32+
*
33+
* @param string $entity_type
34+
* @param int $id
35+
* @param ResolveInfo|null $info
36+
* @return array
37+
*/
38+
public function getData(string $entity_type, int $id, ResolveInfo $info = null): array
39+
{
40+
return $this->dataProviders[strtolower($entity_type)]->getData(
41+
$entity_type,
42+
$id,
43+
$info
44+
);
45+
}
46+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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\UrlRewriteGraphQl\Model\DataProvider;
9+
10+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
11+
12+
interface EntityDataProviderInterface
13+
{
14+
/**
15+
* Get data for url rewrite entity
16+
*
17+
* @param string $entity_type
18+
* @param int $id
19+
* @param ResolveInfo|null $info
20+
* @return array
21+
*/
22+
public function getData(
23+
string $entity_type,
24+
int $id,
25+
ResolveInfo $info = null
26+
): array;
27+
}

0 commit comments

Comments
 (0)