Skip to content

Commit 20b6b41

Browse files
committed
B2B-2658: Implement GraphQL Resolver Cache for Customer query
1 parent 1024cc1 commit 20b6b41

File tree

5 files changed

+24
-12
lines changed

5 files changed

+24
-12
lines changed

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,20 @@ public function preProcessParentValue(array &$value): void
124124
*/
125125
private function hydrateData(&$value)
126126
{
127-
$key = $this->defaultFlagGetter->getFlagFromValue($value) ?? null;
128-
if ($value && $key) {
129-
if (isset($this->processedValues[$key])) {
130-
$value = $this->processedValues[$key];
131-
} elseif (isset($this->hydrators[$key]) && $this->hydrators[$key] instanceof HydratorInterface) {
132-
$this->hydrators[$key]->hydrate($value);
133-
$this->defaultFlagSetter->unsetFlagFromValue($value);
134-
$this->processedValues[$key] = $value;
127+
$reference = $this->defaultFlagGetter->getFlagFromValue($value) ?? null;
128+
if (isset($reference['cacheKey']) && isset($reference['index'])) {
129+
$cacheKey = $reference['cacheKey'];
130+
$index = $reference['index'];
131+
if ($value && $cacheKey) {
132+
if (isset($this->processedValues[$cacheKey][$index])) {
133+
$value = $this->processedValues[$cacheKey][$index];
134+
} elseif (isset($this->hydrators[$cacheKey])
135+
&& $this->hydrators[$cacheKey] instanceof HydratorInterface
136+
) {
137+
$this->hydrators[$cacheKey]->hydrate($value);
138+
$this->defaultFlagSetter->unsetFlagFromValue($value);
139+
$this->processedValues[$cacheKey][$index] = $value;
140+
}
135141
}
136142
}
137143
}

app/code/Magento/GraphQlResolverCache/Model/Resolver/Result/ValueProcessor/FlagGetter/FlagGetterInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ interface FlagGetterInterface
1818
* @param array $value
1919
* @return string|null
2020
*/
21-
public function getFlagFromValue(&$value): ?string;
21+
public function getFlagFromValue($value): ?array;
2222
}

app/code/Magento/GraphQlResolverCache/Model/Resolver/Result/ValueProcessor/FlagGetter/Generic.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Generic implements FlagGetterInterface
1717
/**
1818
* @inheritdoc
1919
*/
20-
public function getFlagFromValue(&$value): ?string
20+
public function getFlagFromValue($value): ?array
2121
{
2222
return $value[ValueProcessorInterface::VALUE_HYDRATION_REFERENCE_KEY] ?? null;
2323
}

app/code/Magento/GraphQlResolverCache/Model/Resolver/Result/ValueProcessor/FlagSetter/Enumerable.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ class Enumerable implements FlagSetterInterface
2020
public function setFlagOnValue(&$value, string $flagValue): void
2121
{
2222
foreach ($value as $key => $data) {
23-
$value[$key][ValueProcessorInterface::VALUE_HYDRATION_REFERENCE_KEY] = $flagValue;
23+
$value[$key][ValueProcessorInterface::VALUE_HYDRATION_REFERENCE_KEY] = [
24+
'cacheKey' => $flagValue,
25+
'index' => $key
26+
];
2427
}
2528
}
2629

app/code/Magento/GraphQlResolverCache/Model/Resolver/Result/ValueProcessor/FlagSetter/Generic.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ class Generic implements FlagSetterInterface
1919
*/
2020
public function setFlagOnValue(&$value, string $flagValue): void
2121
{
22-
$value[ValueProcessorInterface::VALUE_HYDRATION_REFERENCE_KEY] = $flagValue;
22+
$value[ValueProcessorInterface::VALUE_HYDRATION_REFERENCE_KEY] = [
23+
'cacheKey' => $flagValue,
24+
'index' => 0
25+
];
2326
}
2427

2528
/**

0 commit comments

Comments
 (0)