Skip to content

Commit

Permalink
Move the index and indexer configuration to the extension instead
Browse files Browse the repository at this point in the history
  • Loading branch information
loevgaard committed Jul 3, 2024
1 parent 021de9d commit 3cc98ae
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 69 deletions.
65 changes: 0 additions & 65 deletions src/DependencyInjection/Compiler/RegisterIndexesPass.php

This file was deleted.

58 changes: 57 additions & 1 deletion src/DependencyInjection/SetonoSyliusMeilisearchExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,24 @@

namespace Setono\SyliusMeilisearchPlugin\DependencyInjection;

use Meilisearch\Client;
use Setono\SyliusMeilisearchPlugin\Config\Index;
use Setono\SyliusMeilisearchPlugin\DataMapper\DataMapperInterface;
use Setono\SyliusMeilisearchPlugin\Document\Document;
use Setono\SyliusMeilisearchPlugin\Filter\Doctrine\FilterInterface as DoctrineFilterInterface;
use Setono\SyliusMeilisearchPlugin\Filter\Object\FilterInterface as ObjectFilterInterface;
use Setono\SyliusMeilisearchPlugin\Indexer\DefaultIndexer;
use Setono\SyliusMeilisearchPlugin\Indexer\IndexerInterface;
use Setono\SyliusMeilisearchPlugin\Provider\IndexScope\IndexScopeProviderInterface;
use Setono\SyliusMeilisearchPlugin\UrlGenerator\EntityUrlGeneratorInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Reference;
use function Symfony\Component\String\u;

final class SetonoSyliusMeilisearchExtension extends Extension
{
Expand All @@ -22,7 +31,7 @@ public function load(array $configs, ContainerBuilder $container): void
* @psalm-suppress PossiblyNullArgument
*
* @var array{
* indexes: array<string, mixed>,
* indexes: array<string, array{document: class-string<Document>, indexer: string|null, entities: list<class-string>, prefix: string|null}>,
* server: array{ host: string, master_key: string },
* search: array{ enabled: bool, indexes: list<string> },
* routes: array{ search: string }
Expand Down Expand Up @@ -70,5 +79,52 @@ public function load(array $configs, ContainerBuilder $container): void

$container->registerForAutoconfiguration(EntityUrlGeneratorInterface::class)
->addTag('setono_sylius_meilisearch.url_generator');

self::registerIndexesConfiguration($config['indexes'], $container);
}

/**
* @param array<string, array{document: class-string<Document>, indexer: string|null, entities: list<class-string>, prefix: string|null}> $config
*/
private static function registerIndexesConfiguration(array $config, ContainerBuilder $container): void
{
$indexRegistry = $container->getDefinition('setono_sylius_meilisearch.config.index_registry');

foreach ($config as $indexName => $index) {
$indexServiceId = sprintf('setono_sylius_meilisearch.index.%s', $indexName);

$indexerServiceId = $index['indexer'] ?? self::registerDefaultIndexer($container, $indexName, $indexServiceId);

$container->setDefinition($indexServiceId, new Definition(Index::class, [
$indexName,
$index['document'],
$index['entities'],
ServiceLocatorTagPass::register($container, [IndexerInterface::class => new Reference($indexerServiceId)]),
$index['prefix'],
]));

$indexRegistry->addMethodCall('add', [new Reference($indexServiceId)]);

$container->setAlias(sprintf(Index::class . ' $%s', u($indexName)->camel()), $indexServiceId);
$container->setAlias(sprintf(IndexerInterface::class . ' $%sIndexer', u($indexName)->camel()), $indexServiceId);
}
}

private static function registerDefaultIndexer(ContainerBuilder $container, string $indexName, string $indexServiceId): string
{
$indexerServiceId = sprintf('setono_sylius_meilisearch.indexer.%s', $indexName);

$container->setDefinition($indexerServiceId, new Definition(DefaultIndexer::class, [
new Reference($indexServiceId),
new Reference('doctrine'),
new Reference('setono_sylius_meilisearch.provider.index_scope.composite'),
new Reference('setono_sylius_meilisearch.resolver.index_name'),
new Reference('setono_sylius_meilisearch.data_mapper.composite'),
new Reference('serializer'),
new Reference(Client::class),
new Reference('setono_sylius_meilisearch.filter.object.composite'),
]));

return $indexerServiceId;
}
}
3 changes: 0 additions & 3 deletions src/SetonoSyliusMeilisearchPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
namespace Setono\SyliusMeilisearchPlugin;

use Setono\CompositeCompilerPass\CompositeCompilerPass;
use Setono\SyliusMeilisearchPlugin\DependencyInjection\Compiler\RegisterIndexesPass;
use Sylius\Bundle\CoreBundle\Application\SyliusPluginTrait;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
Expand All @@ -18,8 +17,6 @@ public function build(ContainerBuilder $container): void
{
parent::build($container);

$container->addCompilerPass(new RegisterIndexesPass());

// Register services in composite services
$container->addCompilerPass(new CompositeCompilerPass(
'setono_sylius_meilisearch.data_mapper.composite',
Expand Down

0 comments on commit 3cc98ae

Please sign in to comment.