From d8508f3c96a49a91ef47ddf841207e4a3b257797 Mon Sep 17 00:00:00 2001 From: Serreau Jovann Date: Thu, 26 Mar 2026 16:15:41 +0100 Subject: [PATCH] Refactor MeilisearchConsistencyCommand: reduce cognitive complexity and extract constants - Extract filterUsers() and createUserIndex() from checkUserIndex() to reduce cognitive complexity from 16 to under 15 - Add INDEXES_ENDPOINT constant to replace duplicated "/indexes" literal Co-Authored-By: Claude Opus 4.6 (1M context) --- src/Command/MeilisearchConsistencyCommand.php | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/Command/MeilisearchConsistencyCommand.php b/src/Command/MeilisearchConsistencyCommand.php index d6c4062..24055a2 100644 --- a/src/Command/MeilisearchConsistencyCommand.php +++ b/src/Command/MeilisearchConsistencyCommand.php @@ -26,6 +26,7 @@ use Symfony\Component\Console\Style\SymfonyStyle; class MeilisearchConsistencyCommand extends Command { private const INDEX_MISSING_MSG = ' [%s] Index missing'; + private const INDEXES_ENDPOINT = '/indexes'; public function __construct( private MeilisearchService $meilisearch, @@ -180,7 +181,7 @@ class MeilisearchConsistencyCommand extends Command } if (!$indexExists && $fix) { - $this->meilisearch->request('POST', '/indexes', ['uid' => $index, 'primaryKey' => 'id']); + $this->meilisearch->request('POST', self::INDEXES_ENDPOINT, ['uid' => $index, 'primaryKey' => 'id']); $io->text(sprintf(' [%s] Created index, indexing %d event(s)', $index, \count($dbEvents))); foreach ($dbEvents as $event) { $this->eventIndex->indexEvent($event); @@ -223,7 +224,7 @@ class MeilisearchConsistencyCommand extends Command $dbOrders = $this->em->getRepository(BilletBuyer::class)->findBy(['event' => $event]); if (!$indexExists && $fix) { - $this->meilisearch->request('POST', '/indexes', ['uid' => $index, 'primaryKey' => 'id']); + $this->meilisearch->request('POST', self::INDEXES_ENDPOINT, ['uid' => $index, 'primaryKey' => 'id']); $io->text(sprintf(' [%s] Created index, indexing %d order(s)', $index, \count($dbOrders))); foreach ($dbOrders as $order) { $this->orderIndex->indexOrder($order); @@ -262,23 +263,10 @@ class MeilisearchConsistencyCommand extends Command return [0, 0]; } - $allUsers = $this->em->getRepository(User::class)->findAll(); - - if ($isOrganizer) { - $dbUsers = array_filter($allUsers, fn (User $u) => $u->isApproved() && \in_array('ROLE_ORGANIZER', $u->getRoles(), true)); - } else { - $dbUsers = array_filter($allUsers, fn (User $u) => $u->isVerified() && !\in_array('ROLE_ORGANIZER', $u->getRoles(), true) && !\in_array('ROLE_ROOT', $u->getRoles(), true)); - } + $dbUsers = $this->filterUsers($isOrganizer); if (!$indexExists && $fix) { - $this->meilisearch->request('POST', '/indexes', ['uid' => $index, 'primaryKey' => 'id']); - $docs = array_values(array_map(fn (User $u) => $this->userToDocument($u, $isOrganizer), $dbUsers)); - $io->text(sprintf(' [%s] Created index, indexing %d user(s)', $index, \count($docs))); - if ([] !== $docs) { - $this->meilisearch->addDocuments($index, $docs); - } - - return [0, \count($docs)]; + return $this->createUserIndex($index, $dbUsers, $isOrganizer, $io); } $meiliIds = $this->meilisearch->getAllDocumentIds($index); @@ -300,6 +288,37 @@ class MeilisearchConsistencyCommand extends Command }); } + /** + * @return list + */ + private function filterUsers(bool $isOrganizer): array + { + $allUsers = $this->em->getRepository(User::class)->findAll(); + + if ($isOrganizer) { + return array_values(array_filter($allUsers, fn (User $u) => $u->isApproved() && \in_array('ROLE_ORGANIZER', $u->getRoles(), true))); + } + + return array_values(array_filter($allUsers, fn (User $u) => $u->isVerified() && !\in_array('ROLE_ORGANIZER', $u->getRoles(), true) && !\in_array('ROLE_ROOT', $u->getRoles(), true))); + } + + /** + * @param list $dbUsers + * + * @return array{int, int} + */ + private function createUserIndex(string $index, array $dbUsers, bool $isOrganizer, SymfonyStyle $io): array + { + $this->meilisearch->request('POST', self::INDEXES_ENDPOINT, ['uid' => $index, 'primaryKey' => 'id']); + $docs = array_values(array_map(fn (User $u) => $this->userToDocument($u, $isOrganizer), $dbUsers)); + $io->text(sprintf(' [%s] Created index, indexing %d user(s)', $index, \count($docs))); + if ([] !== $docs) { + $this->meilisearch->addDocuments($index, $docs); + } + + return [0, \count($docs)]; + } + /** * @return array */