Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@
}
],
"require": {
"php": "^7.4||^8.0",
"php": "^8.1",
"doctrine/orm": "^2.8 || ^3.2",
"symfony/framework-bundle": "^4.3|^5|^6.0|^7.0",
"symfony/console": "^4.3.4|^5|^6.0|^7.0",
"typesense/typesense-php": "^4.5",
"symfony/framework-bundle": "^5.4|^6.0|^7.0|^8.0",
"symfony/console": "^5.4|^6.0|^7.0|^8.0",
"typesense/typesense-php": "^4.5 || ^6.0",
"php-http/curl-client": "^2.2",
"monolog/monolog": "^2.3|^3.0",
"symfony/property-access": "^3.4|^4.3|^5|^6.0|^7.0",
"symfony/http-client": "^5.4|^6.2|^7.0"
"symfony/property-access": "^5.4|^6.0|^7.0|^8.0",
"symfony/http-client": "^5.4|^6.2|^7.0|^8.0"
},
"require-dev": {
"symfony/phpunit-bridge": "^5.0|^6.0",
"phpunit/phpunit": "^9.5",
"symfony/yaml": "^3.4 || ^4.4 || ^5.4 || ^6.0",
"symfony/phpunit-bridge": "^5.0|^6.0|^7.0|^8.0",
"phpunit/phpunit": "^9.5|^10.0|^11.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0",
"dg/bypass-finals": "^1.9",
"phpspec/prophecy-phpunit": "^2.0"
},
Expand Down
8 changes: 3 additions & 5 deletions src/Command/CreateCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
namespace ACSEO\TypesenseBundle\Command;

use ACSEO\TypesenseBundle\Manager\CollectionManager;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

#[AsCommand(name: 'typesense:create', description: 'Create Typesense indexes')]
class CreateCommand extends Command
{
protected static $defaultName = 'typesense:create';
private $collectionManager;

public function __construct(CollectionManager $collectionManager)
Expand All @@ -22,13 +23,10 @@ public function __construct(CollectionManager $collectionManager)
$this->collectionManager = $collectionManager;
}

protected function configure()
protected function configure(): void
{
$this
->setName(self::$defaultName)
->addOption('indexes', null, InputOption::VALUE_OPTIONAL, 'The index(es) to repopulate. Comma separated values')
->setDescription('Create Typsenses indexes')

;
}

Expand Down
8 changes: 3 additions & 5 deletions src/Command/ImportCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@
use ACSEO\TypesenseBundle\Manager\DocumentManager;
use ACSEO\TypesenseBundle\Transformer\DoctrineToTypesenseTransformer;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

#[AsCommand(name: 'typesense:import', description: 'Import collections from Database')]
class ImportCommand extends Command
{
protected static $defaultName = 'typesense:import';

private $em;
private $collectionManager;
private $documentManager;
Expand All @@ -42,11 +42,9 @@ public function __construct(
$this->transformer = $transformer;
}

protected function configure()
protected function configure(): void
{
$this
->setName(self::$defaultName)
->setDescription('Import collections from Database')
->addOption('action', null, InputOption::VALUE_OPTIONAL, 'Action modes for typesense import ("create", "upsert" or "update")', 'upsert')
->addOption('indexes', null, InputOption::VALUE_OPTIONAL, 'The index(es) to repopulate. Comma separated values')
->addOption('first-page', null, InputOption::VALUE_REQUIRED, 'The pager\'s page to start population from. Including the given page.', 1)
Expand Down
6 changes: 3 additions & 3 deletions src/DependencyInjection/ACSEOTypesenseExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Symfony\Component\DependencyInjection\ChildDefinition;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use Symfony\Component\DependencyInjection\Reference;

class ACSEOTypesenseExtension extends Extension
Expand Down Expand Up @@ -45,11 +45,11 @@ public function load(array $configs, ContainerBuilder $container): void
return;
}

$loader = new XMlFileLoader(
$loader = new PhpFileLoader(
$container,
new FileLocator(__DIR__.'/../Resources/config')
);
$loader->load('services.xml');
$loader->load('services.php');

$this->loadClient($config['typesense'], $container);

Expand Down
139 changes: 139 additions & 0 deletions src/Resources/config/services.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
<?php

declare(strict_types=1);

use ACSEO\TypesenseBundle\Client\CollectionClient;
use ACSEO\TypesenseBundle\Client\TypesenseClient;
use ACSEO\TypesenseBundle\Command\CreateCommand;
use ACSEO\TypesenseBundle\Command\ImportCommand;
use ACSEO\TypesenseBundle\Controller\TypesenseAutocompleteController;
use ACSEO\TypesenseBundle\DataCollector\TypesenseDataCollector;
use ACSEO\TypesenseBundle\EventListener\TypesenseIndexer;
use ACSEO\TypesenseBundle\Finder\CollectionFinder;
use ACSEO\TypesenseBundle\Finder\SpecificCollectionFinder;
use ACSEO\TypesenseBundle\Logger\TypesenseLogger;
use ACSEO\TypesenseBundle\Manager\CollectionManager;
use ACSEO\TypesenseBundle\Manager\DocumentManager;
use ACSEO\TypesenseBundle\Transformer\DoctrineToTypesenseTransformer;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

use function Symfony\Component\DependencyInjection\Loader\Configurator\service;

return static function (ContainerConfigurator $container): void {
$services = $container->services()
->defaults()
->public();

// Abstract definition for client
$services->set('typesense.client_prototype', TypesenseClient::class)
->abstract()
->args([
'', // host
'', // key
service('typesense.logger')->nullOnInvalid(), // logger
]);

// Abstract definition for all generic finders
$services->set('typesense.finder', CollectionFinder::class)
->abstract()
->args([
service('typesense.collection_client'),
service('doctrine.orm.entity_manager'),
'', // collection config
]);

// Abstract definition for all specific finders
$services->set('typesense.specificfinder', SpecificCollectionFinder::class)
->abstract()
->args([
'', // generic finder class
'', // finder arguments
]);

// Autocomplete controller
$services->set('typesense.autocomplete_controller', TypesenseAutocompleteController::class)
->args([
'', // routes
]);

// Logger
$services->set('typesense.logger', TypesenseLogger::class)
->public(false);

$services->alias(TypesenseLogger::class, 'typesense.logger');

// Data Collector
$services->set('typesense.data_collector', TypesenseDataCollector::class)
->public(false)
->args([
service('typesense.logger'),
])
->tag('data_collector', [
'template' => '@ACSEOTypesense/DataCollector/typesense.html.twig',
'id' => 'typesense',
'priority' => 300,
]);

// Collection Client
$services->set('typesense.collection_client', CollectionClient::class)
->args([
service('typesense.client'),
service('typesense.logger')->nullOnInvalid(),
]);

$services->alias(CollectionClient::class, 'typesense.collection_client');
$services->alias(TypesenseClient::class, 'typesense.client');

// Collection Manager
$services->set('typesense.collection_manager', CollectionManager::class)
->args([
service('typesense.collection_client'),
service('typesense.transformer.doctrine_to_typesense'),
'', // collections
]);

$services->alias(CollectionManager::class, 'typesense.collection_manager');

// Document Manager
$services->set('typesense.document_manager', DocumentManager::class)
->args([
service('typesense.client'),
]);

// Doctrine Event Listener
$services->set('typesense.listener.doctrine_indexer', TypesenseIndexer::class)
->args([
service('typesense.collection_manager'),
service('typesense.document_manager'),
service('typesense.transformer.doctrine_to_typesense'),
])
->tag('doctrine.event_listener', ['event' => 'postPersist', 'priority' => 500, 'connection' => 'default'])
->tag('doctrine.event_listener', ['event' => 'postUpdate', 'priority' => 500, 'connection' => 'default'])
->tag('doctrine.event_listener', ['event' => 'preRemove', 'priority' => 500, 'connection' => 'default'])
->tag('doctrine.event_listener', ['event' => 'postRemove', 'priority' => 500, 'connection' => 'default'])
->tag('doctrine.event_listener', ['event' => 'postFlush', 'priority' => 500, 'connection' => 'default']);

// Transformer
$services->set('typesense.transformer.doctrine_to_typesense', DoctrineToTypesenseTransformer::class)
->args([
'', // collections
service('property_accessor'),
service('service_container'),
]);

// Commands
$services->set('typesense.command.create', CreateCommand::class)
->tag('console.command')
->args([
service('typesense.collection_manager'),
]);

$services->set('typesense.command.import', ImportCommand::class)
->tag('console.command')
->args([
service('doctrine.orm.entity_manager'),
service('typesense.collection_manager'),
service('typesense.document_manager'),
service('typesense.transformer.doctrine_to_typesense'),
]);
};
99 changes: 0 additions & 99 deletions src/Resources/config/services.xml

This file was deleted.