Skip to content

Commit

Permalink
GraphQl-198: Products: access to related/up-sell/cross-sell product f…
Browse files Browse the repository at this point in the history
…ields
  • Loading branch information
naydav committed May 8, 2019
1 parent 4a5b330 commit 4835285
Show file tree
Hide file tree
Showing 8 changed files with 275 additions and 316 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/
declare(strict_types=1);

namespace Magento\RelatedProductGraphQl\Model\DataProvider\Products;
namespace Magento\RelatedProductGraphQl\Model\DataProvider;

use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\Product\Link;
Expand All @@ -14,7 +14,7 @@
/**
* Related Products Data Provider
*/
class LinkedProductsDataProvider
class RelatedProductDataProvider
{
/**
* @var LinkFactory
Expand All @@ -24,24 +24,45 @@ class LinkedProductsDataProvider
/**
* @param LinkFactory $linkFactory
*/
public function __construct(LinkFactory $linkFactory)
{
public function __construct(
LinkFactory $linkFactory
) {
$this->linkFactory = $linkFactory;
}

/**
* Get Related Products by Product and Link Type
* Related Products Data
*
* @param Product $product
* @param array $fields
* @param int $linkType
* @return array
*/
public function getData(Product $product, array $fields, int $linkType): array
{
$relatedProducts = $this->getRelatedProducts($product, $fields, $linkType);

$data = [];
foreach ($relatedProducts as $relatedProduct) {
$relatedProductData = $relatedProduct->getData();
$relatedProductData['model'] = $relatedProduct;
}
return $data;
}

/**
* Get Related Products
*
* @param Product $product
* @param array $fields
* @param int $linkType
* @return Product[]
*/
public function getRelatedProducts(Product $product, array $fields, int $linkType): array
private function getRelatedProducts(Product $product, array $fields, int $linkType): array
{
/** @var Link $link */
$link = $this->linkFactory->create([ 'data' => [
'link_type_id' => $linkType
'link_type_id' => $linkType,
]]);

$collection = $link->getProductCollection();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

namespace Magento\RelatedProductGraphQl\Model\Resolver;

use Magento\RelatedProductGraphQl\Model\DataProvider\RelatedDataProvider;
use Magento\Catalog\Model\Product\Link;
use Magento\CatalogGraphQl\Model\Resolver\Product\ProductFieldsSelector;
use Magento\Framework\Exception\LocalizedException;
use Magento\RelatedProductGraphQl\Model\DataProvider\RelatedProductDataProvider;
use Magento\Framework\GraphQl\Config\Element\Field;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
Expand All @@ -18,27 +21,39 @@
class CrossSellProducts implements ResolverInterface
{
/**
* @see module di.xml
* @var RelatedDataProvider
* @var ProductFieldsSelector
*/
private $dataProvider;
private $productFieldsSelector;

/**
* @param RelatedDataProvider $dataProvider
* @var RelatedProductDataProvider
*/
private $relatedProductDataProvider;

/**
* @param ProductFieldsSelector $productFieldsSelector
* @param RelatedProductDataProvider $relatedProductDataProvider
*/
public function __construct(
RelatedDataProvider $dataProvider
ProductFieldsSelector $productFieldsSelector,
RelatedProductDataProvider $relatedProductDataProvider
) {
$this->dataProvider = $dataProvider;
$this->productFieldsSelector = $productFieldsSelector;
$this->relatedProductDataProvider = $relatedProductDataProvider;
}

/**
* @inheritdoc
*/
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
$data = $this->dataProvider->getProducts($info, $value);
if (!isset($value['model'])) {
throw new LocalizedException(__('"model" value should be specified'));
}
$product = $value['model'];
$fields = $this->productFieldsSelector->getProductFieldsFromInfo($info, 'crosssell_products');

$data = $this->relatedProductDataProvider->getData($product, $fields, Link::LINK_TYPE_CROSSSELL);
return $data;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

namespace Magento\RelatedProductGraphQl\Model\Resolver;

use Magento\RelatedProductGraphQl\Model\DataProvider\RelatedDataProvider;
use Magento\Catalog\Model\Product\Link;
use Magento\CatalogGraphQl\Model\Resolver\Product\ProductFieldsSelector;
use Magento\Framework\Exception\LocalizedException;
use Magento\RelatedProductGraphQl\Model\DataProvider\RelatedProductDataProvider;
use Magento\Framework\GraphQl\Config\Element\Field;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
Expand All @@ -18,26 +21,39 @@
class RelatedProducts implements ResolverInterface
{
/**
* @var RelatedDataProvider
* @var ProductFieldsSelector
*/
private $dataProvider;
private $productFieldsSelector;

/**
* @param RelatedDataProvider $dataProvider
* @var RelatedProductDataProvider
*/
private $relatedProductDataProvider;

/**
* @param ProductFieldsSelector $productFieldsSelector
* @param RelatedProductDataProvider $relatedProductDataProvider
*/
public function __construct(
RelatedDataProvider $dataProvider
ProductFieldsSelector $productFieldsSelector,
RelatedProductDataProvider $relatedProductDataProvider
) {
$this->dataProvider = $dataProvider;
$this->productFieldsSelector = $productFieldsSelector;
$this->relatedProductDataProvider = $relatedProductDataProvider;
}

/**
* @inheritdoc
*/
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
$data = $this->dataProvider->getProducts($info, $value);
if (!isset($value['model'])) {
throw new LocalizedException(__('"model" value should be specified'));
}
$product = $value['model'];
$fields = $this->productFieldsSelector->getProductFieldsFromInfo($info, 'related_products');

$data = $this->relatedProductDataProvider->getData($product, $fields, Link::LINK_TYPE_RELATED);
return $data;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

namespace Magento\RelatedProductGraphQl\Model\Resolver;

use Magento\RelatedProductGraphQl\Model\DataProvider\RelatedDataProvider;
use Magento\Catalog\Model\Product\Link;
use Magento\CatalogGraphQl\Model\Resolver\Product\ProductFieldsSelector;
use Magento\Framework\Exception\LocalizedException;
use Magento\RelatedProductGraphQl\Model\DataProvider\RelatedProductDataProvider;
use Magento\Framework\GraphQl\Config\Element\Field;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
Expand All @@ -18,27 +21,39 @@
class UpSellProducts implements ResolverInterface
{
/**
* @see module di.xml
* @var RelatedDataProvider
* @var ProductFieldsSelector
*/
private $dataProvider;
private $productFieldsSelector;

/**
* @param RelatedDataProvider $dataProvider
* @var RelatedProductDataProvider
*/
private $relatedProductDataProvider;

/**
* @param ProductFieldsSelector $productFieldsSelector
* @param RelatedProductDataProvider $relatedProductDataProvider
*/
public function __construct(
RelatedDataProvider $dataProvider
ProductFieldsSelector $productFieldsSelector,
RelatedProductDataProvider $relatedProductDataProvider
) {
$this->dataProvider = $dataProvider;
$this->productFieldsSelector = $productFieldsSelector;
$this->relatedProductDataProvider = $relatedProductDataProvider;
}

/**
* @inheritdoc
*/
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
$data = $this->dataProvider->getProducts($info, $value);
if (!isset($value['model'])) {
throw new LocalizedException(__('"model" value should be specified'));
}
$product = $value['model'];
$fields = $this->productFieldsSelector->getProductFieldsFromInfo($info, 'upsell_products');

$data = $this->relatedProductDataProvider->getData($product, $fields, Link::LINK_TYPE_UPSELL);
return $data;
}
}
31 changes: 0 additions & 31 deletions app/code/Magento/RelatedProductGraphQl/etc/graphql/di.xml

This file was deleted.

Loading

0 comments on commit 4835285

Please sign in to comment.