Skip to content

Commit 3d38de3

Browse files
committed
B2B-2677: [MediaGallery] Implement data caching for GraphQL results on resolver level
1 parent 7e40848 commit 3d38de3

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

app/code/Magento/CatalogGraphQl/Model/Resolver/Cache/Product/MediaGallery/ResolverCacheIdentity.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function getIdentities($resolvedData, ?array $parentResolvedData = null):
3131
/** @var Product $mediaGalleryEntryProduct */
3232
$mediaGalleryEntryProduct = array_pop($resolvedData)['model'];
3333
return [
34-
sprintf('%s_%s', self::CACHE_TAG, $mediaGalleryEntryProduct->getSku())
34+
sprintf('%s_%s', self::CACHE_TAG, $mediaGalleryEntryProduct->getId())
3535
];
3636
}
3737
}

app/code/Magento/CatalogGraphQl/Model/Resolver/Cache/Product/MediaGallery/TagsStrategy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function getTags($object)
3636
$this->mediaGalleryChangeDetector->isChanged($object)
3737
) {
3838
return [
39-
sprintf('%s_%s', ResolverCacheIdentity::CACHE_TAG, $object->getSku())
39+
sprintf('%s_%s', ResolverCacheIdentity::CACHE_TAG, $object->getId())
4040
];
4141
}
4242

app/code/Magento/CatalogGraphQl/Observer/AfterImportDataObserver.php

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

88
namespace Magento\CatalogGraphQl\Observer;
99

10+
use Magento\Catalog\Model\ProductRepository;
11+
use Magento\Framework\Api\SearchCriteriaBuilder;
1012
use Magento\Framework\Event\Observer;
1113
use Magento\CatalogGraphQl\Model\Resolver\Cache\Product\MediaGallery\ResolverCacheIdentity;
1214
use Magento\Framework\Event\ObserverInterface;
@@ -22,12 +24,29 @@ class AfterImportDataObserver implements ObserverInterface
2224
*/
2325
private $graphQlResolverCache;
2426

27+
/**
28+
* @var ProductRepository
29+
*/
30+
private $productRepository;
31+
32+
/**
33+
* @var SearchCriteriaBuilder
34+
*/
35+
private $criteriaBuilder;
36+
2537
/**
2638
* @param GraphQlResolverCache $graphQlResolverCache
39+
* @param ProductRepository $productRepository
40+
* @param SearchCriteriaBuilder $criteriaBuilder
2741
*/
28-
public function __construct(GraphQlResolverCache $graphQlResolverCache)
29-
{
42+
public function __construct(
43+
GraphQlResolverCache $graphQlResolverCache,
44+
ProductRepository $productRepository,
45+
SearchCriteriaBuilder $criteriaBuilder
46+
) {
3047
$this->graphQlResolverCache = $graphQlResolverCache;
48+
$this->productRepository = $productRepository;
49+
$this->criteriaBuilder = $criteriaBuilder;
3150
}
3251

3352
/**
@@ -48,10 +67,13 @@ public function execute(Observer $observer)
4867
}
4968

5069
$productSkusToInvalidate = array_merge(...$productSkusToInvalidate);
70+
$products = $this->productRepository->getList(
71+
$this->criteriaBuilder->addFilter('sku', $productSkusToInvalidate, 'in')->create()
72+
)->getItems();
5173

52-
$tags = array_map(function ($productSku) {
53-
return sprintf('%s_%s', ResolverCacheIdentity::CACHE_TAG, $productSku);
54-
}, $productSkusToInvalidate);
74+
$tags = array_map(function ($product) {
75+
return sprintf('%s_%s', ResolverCacheIdentity::CACHE_TAG, $product->getId());
76+
}, $products);
5577

5678
$this->graphQlResolverCache->clean(
5779
\Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,

dev/tests/api-functional/testsuite/Magento/GraphQl/Catalog/ResolverCache/MediaGalleryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ private function getExpectedCacheTags(ProductInterface $product): array
466466
$cacheIdPrefix = $this->graphQlResolverCache->getLowLevelFrontend()->getOption('cache_id_prefix');
467467

468468
return [
469-
$cacheIdPrefix . strtoupper(ResolverCacheIdentity::CACHE_TAG . '_' . $product->getSku()),
469+
$cacheIdPrefix . strtoupper(ResolverCacheIdentity::CACHE_TAG . '_' . $product->getId()),
470470
$cacheIdPrefix . strtoupper(GraphQlResolverCache::CACHE_TAG),
471471
$cacheIdPrefix . 'MAGE',
472472
];

0 commit comments

Comments
 (0)