<?php declare(strict_types=1); namespace NicolasBejean\CategoryWidget\Model\Resolver; use \NicolasBejean\CategoryWidget\Model\Resolver\DataProvider\CategoryWidget as CategoryWidgetDataProvider; use \Magento\Framework\GraphQl\Config\Element\Field; use \Magento\Framework\GraphQl\Query\ResolverInterface; use \Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use \Magento\Framework\Exception\NoSuchEntityException; use \Magento\Framework\GraphQl\Exception\GraphQlInputException; use \Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; /** * Class CategoryWidgets * * @category PHP * @package NicolasBejean\CategoryWidget\Model\Resolver * @author Nicolas BĂ©jean <nicolas@bejean.eu> * @license https://github.com/nicolasbejean/category-widget/blob/master/licence.txt BSD Licence * @link https://www.bejean.eu */ class CategoryWidgets implements ResolverInterface { /** * @var CategoryWidgetDataProvider */ private $dataProvider; /** * @param CategoryWidgetDataProvider $dataProvider */ public function __construct( CategoryWidgetDataProvider $dataProvider ) { $this->dataProvider = $dataProvider; } /** * @inheritdoc */ public function resolve( Field $field, $context, ResolveInfo $info, array $value = null, array $args = null ) { $categoryWidgetIdentifiers = $this->getCategoryWidgetIdentifiers($args); $categoryWidgetsData = $this->getCategoryWidgetsData($categoryWidgetIdentifiers); $resultData = [ 'items' => $categoryWidgetsData, ]; return $resultData; } /** * Get Category Widget identifiers * * @param array $args * @return string[] * @throws GraphQlInputException */ private function getCategoryWidgetIdentifiers(array $args): array { if (!isset($args['identifiers']) || !is_array($args['identifiers']) || count($args['identifiers']) === 0) { throw new GraphQlInputException(__('"identifiers" of Category Widgets should be specified')); } return $args['identifiers']; } /** * Get category widgets data * * @param array $categoryWidgetIdentifiers * @return array * @throws GraphQlNoSuchEntityException */ private function getCategoryWidgetsData(array $categoryWidgetIdentifiers): array { $categoryWidgetsData = []; foreach ($categoryWidgetIdentifiers as $categoryWidgetIdentifier) { try { $categoryWidgetsData[$categoryWidgetIdentifier] = $this->dataProvider->getData($categoryWidgetIdentifier); } catch (NoSuchEntityException $e) { $categoryWidgetsData[$categoryWidgetIdentifier] = new GraphQlNoSuchEntityException(__($e->getMessage()), $e); } } return $categoryWidgetsData; } }