Skip to content

Commit f86b68c

Browse files
committed
B2B-2658: Implement GraphQL Resolver Cache for Customer query
1 parent 89f33b0 commit f86b68c

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

app/code/Magento/GraphQlResolverCache/Model/Resolver/Result/HydratorDehydratorProvider.php

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\GraphQlResolverCache\Model\Resolver\Result;
99

10+
use Magento\Framework\Exception\ConfigurationMismatchException;
1011
use Magento\Framework\GraphQl\Query\ResolverInterface;
1112
use Magento\Framework\ObjectManagerInterface;
1213

@@ -64,7 +65,11 @@ public function getDehydratorForResolver(ResolverInterface $resolver): ?Dehydrat
6465
if (array_key_exists($resolverClass, $this->dehydratorInstances)) {
6566
return $this->dehydratorInstances[$resolverClass];
6667
}
67-
$resolverDehydrators = $this->getInstancesForResolver($resolver, $this->dehydratorConfig);
68+
$resolverDehydrators = $this->getInstancesForResolver(
69+
$resolver,
70+
$this->dehydratorConfig,
71+
DehydratorInterface::class
72+
);
6873
if (empty($resolverDehydrators)) {
6974
$this->dehydratorInstances[$resolverClass] = null;
7075
} else {
@@ -87,7 +92,11 @@ public function getHydratorForResolver(ResolverInterface $resolver): ?HydratorIn
8792
if (array_key_exists($resolverClass, $this->hydratorInstances)) {
8893
return $this->hydratorInstances[$resolverClass];
8994
}
90-
$resolverHydrators = $this->getInstancesForResolver($resolver, $this->hydratorConfig);
95+
$resolverHydrators = $this->getInstancesForResolver(
96+
$resolver,
97+
$this->hydratorConfig,
98+
HydratorInterface::class
99+
);
91100
if (empty($resolverHydrators)) {
92101
$this->hydratorInstances[$resolverClass] = null;
93102
} else {
@@ -117,10 +126,15 @@ private function getResolverClass(ResolverInterface $resolver): string
117126
*
118127
* @param ResolverInterface $resolver
119128
* @param array $classesConfig
129+
* @param string $interfaceName
120130
* @return array
131+
* @throws ConfigurationMismatchException
121132
*/
122-
private function getInstancesForResolver(ResolverInterface $resolver, array $classesConfig): array
123-
{
133+
private function getInstancesForResolver(
134+
ResolverInterface $resolver,
135+
array $classesConfig,
136+
string $interfaceName
137+
): array {
124138
$resolverClassesConfig = [];
125139
foreach ($this->getResolverClassChain($resolver) as $resolverClass) {
126140
if (isset($classesConfig[$resolverClass])) {
@@ -141,7 +155,13 @@ private function getInstancesForResolver(ResolverInterface $resolver, array $cla
141155
});
142156
$dataProcessingInstances = [];
143157
foreach ($dataProcessingClassList as $classData) {
144-
$dataProcessingInstances[] = $this->objectManager->get($classData['class']);
158+
if (is_a($classData['class'], $interfaceName, true)) {
159+
$dataProcessingInstances[] = $this->objectManager->get($classData['class']);
160+
} else {
161+
throw new ConfigurationMismatchException(
162+
__('%1 should implement %2', $classData['class'], $interfaceName)
163+
);
164+
}
145165
}
146166
return $dataProcessingInstances;
147167
}

0 commit comments

Comments
 (0)