From 372746c68dd850979f832f48fbfb5b267d41cffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20MARTIN?= Date: Tue, 29 Oct 2024 11:31:55 +0100 Subject: [PATCH 1/2] Make sure transaction succeeded before indexing/removing objects --- src/EventListener/SearchIndexerSubscriber.php | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/EventListener/SearchIndexerSubscriber.php b/src/EventListener/SearchIndexerSubscriber.php index 9cd2b92..5e13adb 100644 --- a/src/EventListener/SearchIndexerSubscriber.php +++ b/src/EventListener/SearchIndexerSubscriber.php @@ -3,43 +3,46 @@ namespace Algolia\SearchBundle\EventListener; use Algolia\SearchBundle\SearchService; +use Doctrine\ORM\Event\PostFlushEventArgs; use Doctrine\ORM\Event\PostPersistEventArgs; use Doctrine\ORM\Event\PostUpdateEventArgs; use Doctrine\ORM\Event\PreRemoveEventArgs; class SearchIndexerSubscriber { - /** - * @var SearchService - */ - private $searchService; + private array $objectsToIndex = []; + private array $objectsToRemove = []; - public function __construct(SearchService $searchService) + public function __construct( + private readonly SearchService $searchService + ) { + } + + public function postPersist(PostPersistEventArgs $args): void { - $this->searchService = $searchService; + $this->objectsToIndex[] = $args->getObject(); } - /** - * @return void - */ - public function postPersist(PostPersistEventArgs $args) + public function postUpdate(PostUpdateEventArgs $args): void { - $this->searchService->index($args->getObjectManager(), $args->getObject()); + $this->objectsToIndex[] = $args->getObject(); } - /** - * @return void - */ - public function postUpdate(PostUpdateEventArgs $args) + public function preRemove(PreRemoveEventArgs $args): void { - $this->searchService->index($args->getObjectManager(), $args->getObject()); + $this->objectsToRemove[] = $args->getObject(); } - /** - * @return void - */ - public function preRemove(PreRemoveEventArgs $args) + public function postFlush(PostFlushEventArgs $args): void { - $this->searchService->remove($args->getObjectManager(), $object = $args->getObject()); + foreach ($this->objectsToIndex as $object) { + $this->searchService->index($args->getObjectManager(), $object); + } + $this->objectsToIndex = []; + + foreach ($this->objectsToRemove as $object) { + $this->searchService->remove($args->getObjectManager(), $object); + } + $this->objectsToRemove = []; } } From 5ceb5d894f0ef5ea0cb0685a1206c6a2318e0de6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20MARTIN?= Date: Tue, 29 Oct 2024 14:42:14 +0100 Subject: [PATCH 2/2] CS fix --- src/EventListener/SearchIndexerSubscriber.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EventListener/SearchIndexerSubscriber.php b/src/EventListener/SearchIndexerSubscriber.php index 5e13adb..51168c4 100644 --- a/src/EventListener/SearchIndexerSubscriber.php +++ b/src/EventListener/SearchIndexerSubscriber.php @@ -10,11 +10,11 @@ class SearchIndexerSubscriber { - private array $objectsToIndex = []; + private array $objectsToIndex = []; private array $objectsToRemove = []; public function __construct( - private readonly SearchService $searchService + private readonly SearchService $searchService, ) { }