From 0b632551dd3aaf7bf7af05cd5043d62358d54ed3 Mon Sep 17 00:00:00 2001 From: Aleksey Polyvanyi Date: Fri, 21 Jun 2024 20:23:00 +0200 Subject: [PATCH 1/5] feature/MTCE-228-Monorepo-v6-refactoring-EasyLock --- composer.json | 5 ++++ .../Message/ActivityLogEntryMessage.php | 6 ++--- .../Messenger/Lock/BatchItemLockFactory.php | 4 +-- .../Lock/BatchItemLockFactoryInterface.php | 2 +- .../Messenger/ProcessBatchItemMiddleware.php | 4 +-- .../tests/Bridge/Symfony/Stubs/KernelStub.php | 4 +-- .../Symfony/Fixtures/app/config/bundles.php | 4 +-- .../RegisterLockStoreServiceCompilerPass.php} | 11 ++++---- ...egisterMessengerMiddlewareCompilerPass.php | 10 +++---- .../EasyLockBundle.php} | 24 ++++++++--------- packages/EasyLock/bundle/Enum/BundleParam.php | 9 +++++++ packages/EasyLock/bundle/Enum/ConfigParam.php | 11 ++++++++ .../EasyLock/bundle/Enum/ConfigServiceId.php | 11 ++++++++ .../config/definition.php | 0 .../config/messenger_middleware.php | 6 ++--- packages/EasyLock/bundle/config/services.php | 23 ++++++++++++++++ packages/EasyLock/composer.json | 26 ++++++++++++++----- packages/EasyLock/docs/laravel/install.md | 4 +-- packages/EasyLock/docs/symfony/install.md | 6 ++--- .../EasyLockServiceProvider.php | 25 +++++++++--------- .../src/Bridge/BridgeConstantsInterface.php | 17 ------------ .../Symfony/Resources/config/services.php | 22 ---------------- .../Exception}/EasyLockExceptionInterface.php | 2 +- .../Exception}/LockAcquiringException.php | 8 +++--- .../Exception}/ShouldRetryException.php | 3 +-- .../Locker/Locker.php} | 11 ++++---- .../Locker/LockerInterface.php} | 5 ++-- .../Common/Locker/ProcessWithLockerTrait.php | 24 +++++++++++++++++ .../src/{ => Common/ValueObject}/LockData.php | 4 +-- .../ValueObject}/LockDataInterface.php | 2 +- .../ValueObject}/WithLockDataInterface.php | 2 +- .../EasyLockDoctrineSchemaListener.php | 2 +- .../Middleware}/ProcessWithLockMiddleware.php | 9 ++++--- .../Stamp}/WithLockDataStamp.php | 8 +++--- .../EasyLock/src/ProcessWithLockTrait.php | 25 ------------------ .../Laravel/EasyLockServiceProviderTest.php | 17 ------------ .../Laravel/storage/logs/lumen-2020-07-24.log | 20 -------------- .../Fixtures/config/in_memory_connection.yaml | 8 ------ .../Fixture/config/in_memory_connection.php | 18 +++++++++++++ .../Stubs => Stub/HttpKernel}/KernelStub.php | 6 ++--- .../AbstractUnitTestCase.php} | 6 ++--- .../bundle}/AbstractSymfonyTestCase.php | 8 +++--- .../bundle}/EasyLockBundleTest.php | 10 +++---- .../laravel}/AbstractLaravelTestCase.php | 12 ++++----- .../laravel/EasyLockServiceProviderTest.php | 17 ++++++++++++ .../src/Common/ValueObject}/LockDataTest.php | 7 ++--- packages/EasySchedule/src/ScheduleRunner.php | 4 +-- .../EasySchedule/tests/ScheduleRunnerTest.php | 9 +++---- .../Laravel/EasyWebhookServiceProvider.php | 4 +-- .../src/Middleware/LockMiddleware.php | 8 +++--- .../Bridge/Laravel/AbstractLumenTestCase.php | 2 +- .../tests/Bridge/Symfony/Stubs/KernelStub.php | 6 ++--- .../tests/Middleware/LockMiddlewareTest.php | 13 +++++----- ...kServiceStub.php => LockerServiceStub.php} | 6 ++--- quality/rector.php | 2 +- 55 files changed, 271 insertions(+), 251 deletions(-) rename packages/EasyLock/{src/Bridge/Symfony/DependencyInjection/Compiler/RegisterLockStoreServicePass.php => bundle/CompilerPass/RegisterLockStoreServiceCompilerPass.php} (80%) rename packages/EasyLock/{src/Bridge/Symfony/DependencyInjection/Compiler => bundle/CompilerPass}/RegisterMessengerMiddlewareCompilerPass.php (85%) rename packages/EasyLock/{src/Bridge/Symfony/EasyLockSymfonyBundle.php => bundle/EasyLockBundle.php} (58%) create mode 100644 packages/EasyLock/bundle/Enum/BundleParam.php create mode 100644 packages/EasyLock/bundle/Enum/ConfigParam.php create mode 100644 packages/EasyLock/bundle/Enum/ConfigServiceId.php rename packages/EasyLock/{src/Bridge/Symfony/Resources => bundle}/config/definition.php (100%) rename packages/EasyLock/{src/Bridge/Symfony/Resources => bundle}/config/messenger_middleware.php (58%) create mode 100644 packages/EasyLock/bundle/config/services.php rename packages/EasyLock/{src/Bridge/Laravel => laravel}/EasyLockServiceProvider.php (63%) delete mode 100644 packages/EasyLock/src/Bridge/BridgeConstantsInterface.php delete mode 100644 packages/EasyLock/src/Bridge/Symfony/Resources/config/services.php rename packages/EasyLock/src/{Interfaces => Common/Exception}/EasyLockExceptionInterface.php (74%) rename packages/EasyLock/src/{Bridge/EasyAsync/Exceptions => Common/Exception}/LockAcquiringException.php (52%) rename packages/EasyLock/src/{Exceptions => Common/Exception}/ShouldRetryException.php (65%) rename packages/EasyLock/src/{LockService.php => Common/Locker/Locker.php} (88%) rename packages/EasyLock/src/{Interfaces/LockServiceInterface.php => Common/Locker/LockerInterface.php} (68%) create mode 100644 packages/EasyLock/src/Common/Locker/ProcessWithLockerTrait.php rename packages/EasyLock/src/{ => Common/ValueObject}/LockData.php (93%) rename packages/EasyLock/src/{Interfaces => Common/ValueObject}/LockDataInterface.php (87%) rename packages/EasyLock/src/{Interfaces => Common/ValueObject}/WithLockDataInterface.php (73%) rename packages/EasyLock/src/{Bridge/Symfony/Listeners => Doctrine/Listener}/EasyLockDoctrineSchemaListener.php (93%) rename packages/EasyLock/src/{Bridge/Symfony/Messenger => Messenger/Middleware}/ProcessWithLockMiddleware.php (88%) rename packages/EasyLock/src/{Bridge/Symfony/Messenger => Messenger/Stamp}/WithLockDataStamp.php (67%) delete mode 100644 packages/EasyLock/src/ProcessWithLockTrait.php delete mode 100644 packages/EasyLock/tests/Bridge/Laravel/EasyLockServiceProviderTest.php delete mode 100644 packages/EasyLock/tests/Bridge/Laravel/storage/logs/lumen-2020-07-24.log delete mode 100644 packages/EasyLock/tests/Bridge/Symfony/Fixtures/config/in_memory_connection.yaml create mode 100644 packages/EasyLock/tests/Fixture/config/in_memory_connection.php rename packages/EasyLock/tests/{Bridge/Symfony/Stubs => Stub/HttpKernel}/KernelStub.php (90%) rename packages/EasyLock/tests/{AbstractTestCase.php => Unit/AbstractUnitTestCase.php} (77%) rename packages/EasyLock/tests/{Bridge/Symfony => Unit/bundle}/AbstractSymfonyTestCase.php (68%) rename packages/EasyLock/tests/{Bridge/Symfony => Unit/bundle}/EasyLockBundleTest.php (63%) rename packages/EasyLock/tests/{Bridge/Laravel => Unit/laravel}/AbstractLaravelTestCase.php (63%) create mode 100644 packages/EasyLock/tests/Unit/laravel/EasyLockServiceProviderTest.php rename packages/EasyLock/tests/{ => Unit/src/Common/ValueObject}/LockDataTest.php (63%) rename packages/EasyWebhook/tests/Stubs/{LockServiceStub.php => LockerServiceStub.php} (83%) diff --git a/composer.json b/composer.json index 06494931c..6c5cf4531 100644 --- a/composer.json +++ b/composer.json @@ -110,6 +110,8 @@ "EonX\\EasyEventDispatcher\\": "packages/EasyEventDispatcher/src", "EonX\\EasyHttpClient\\": "packages/EasyHttpClient/src", "EonX\\EasyLock\\": "packages/EasyLock/src", + "EonX\\EasyLock\\Bundle\\": "packages/EasyLock/bundle", + "EonX\\EasyLock\\Laravel\\": "packages/EasyLock/laravel", "EonX\\EasyLogging\\": "packages/EasyLogging/src", "EonX\\EasyMonorepo\\": "monorepo", "EonX\\EasyNotification\\": "packages/EasyNotification/src", @@ -157,6 +159,9 @@ "EonX\\EasyHttpClient\\Tests\\": "packages/EasyHttpClient/tests", "EonX\\EasyHttpClient\\Tests\\Bridge\\Symfony\\Fixtures\\App\\": "packages/EasyHttpClient/tests/Bridge/Symfony/Fixtures/app/src", "EonX\\EasyLock\\Tests\\": "packages/EasyLock/tests", + "EonX\\EasyLock\\Tests\\Unit\\": "packages/EasyLock/tests/Unit/src", + "EonX\\EasyLock\\Tests\\Unit\\Bundle\\": "packages/EasyLock/tests/Unit/bundle", + "EonX\\EasyLock\\Tests\\Unit\\Laravel\\": "packages/EasyLock/tests/Unit/laravel", "EonX\\EasyLogging\\Tests\\": "packages/EasyLogging/tests", "EonX\\EasyNotification\\Tests\\": "packages/EasyNotification/tests", "EonX\\EasyPagination\\Tests\\": "packages/EasyPagination/tests", diff --git a/packages/EasyActivity/src/Messenger/Message/ActivityLogEntryMessage.php b/packages/EasyActivity/src/Messenger/Message/ActivityLogEntryMessage.php index c00e93cf1..229ef47dc 100644 --- a/packages/EasyActivity/src/Messenger/Message/ActivityLogEntryMessage.php +++ b/packages/EasyActivity/src/Messenger/Message/ActivityLogEntryMessage.php @@ -4,9 +4,9 @@ namespace EonX\EasyActivity\Messenger\Message; use EonX\EasyActivity\Common\Entity\ActivityLogEntry; -use EonX\EasyLock\Interfaces\LockDataInterface; -use EonX\EasyLock\Interfaces\WithLockDataInterface; -use EonX\EasyLock\LockData; +use EonX\EasyLock\Common\ValueObject\LockData; +use EonX\EasyLock\Common\ValueObject\LockDataInterface; +use EonX\EasyLock\Common\ValueObject\WithLockDataInterface; final class ActivityLogEntryMessage implements WithLockDataInterface { diff --git a/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactory.php b/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactory.php index cea248d26..0c02975d7 100644 --- a/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactory.php +++ b/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactory.php @@ -4,8 +4,8 @@ namespace EonX\EasyBatch\Bridge\Symfony\Messenger\Lock; use EonX\EasyBatch\Bridge\Symfony\Messenger\Stamps\BatchItemStamp; -use EonX\EasyLock\Interfaces\LockDataInterface; -use EonX\EasyLock\LockData; +use EonX\EasyLock\Common\ValueObject\LockData; +use EonX\EasyLock\Common\ValueObject\LockDataInterface; use Symfony\Component\Messenger\Envelope; final class BatchItemLockFactory implements BatchItemLockFactoryInterface diff --git a/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactoryInterface.php b/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactoryInterface.php index 7bc3128bb..391cbc33d 100644 --- a/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactoryInterface.php +++ b/packages/EasyBatch/src/Bridge/Symfony/Messenger/Lock/BatchItemLockFactoryInterface.php @@ -3,7 +3,7 @@ namespace EonX\EasyBatch\Bridge\Symfony\Messenger\Lock; -use EonX\EasyLock\Interfaces\LockDataInterface; +use EonX\EasyLock\Common\ValueObject\LockDataInterface; use Symfony\Component\Messenger\Envelope; interface BatchItemLockFactoryInterface diff --git a/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php b/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php index af9361ef6..5f0841497 100644 --- a/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php +++ b/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php @@ -12,7 +12,7 @@ use EonX\EasyBatch\Interfaces\CurrentBatchObjectsAwareInterface; use EonX\EasyBatch\Processors\BatchItemProcessor; use EonX\EasyBatch\Processors\BatchProcessor; -use EonX\EasyLock\Interfaces\LockServiceInterface; +use EonX\EasyLock\Common\Locker\LockerInterface; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; @@ -29,7 +29,7 @@ public function __construct( private readonly BatchItemProcessor $batchItemProcessor, private readonly BatchItemLockFactoryInterface $batchItemLockFactory, private readonly BatchProcessor $batchProcessor, - private readonly LockServiceInterface $lockService, + private readonly LockerInterface $lockService, ) { } diff --git a/packages/EasyBatch/tests/Bridge/Symfony/Stubs/KernelStub.php b/packages/EasyBatch/tests/Bridge/Symfony/Stubs/KernelStub.php index 5c8933614..2f7d92c39 100644 --- a/packages/EasyBatch/tests/Bridge/Symfony/Stubs/KernelStub.php +++ b/packages/EasyBatch/tests/Bridge/Symfony/Stubs/KernelStub.php @@ -7,7 +7,7 @@ use EonX\EasyBatch\Bridge\Symfony\EasyBatchSymfonyBundle; use EonX\EasyEncryption\Bridge\Symfony\EasyEncryptionSymfonyBundle; use EonX\EasyEventDispatcher\Bridge\Symfony\EasyEventDispatcherSymfonyBundle; -use EonX\EasyLock\Interfaces\LockServiceInterface; +use EonX\EasyLock\Common\Locker\LockerInterface; use EonX\EasyRandom\Bridge\Symfony\EasyRandomSymfonyBundle; use Psr\Container\ContainerInterface; use stdClass; @@ -25,7 +25,7 @@ public function process(ContainerBuilder $container): void { $container->setAlias(ContainerInterface::class, 'service_container'); $container->setDefinition(EventDispatcherInterface::class, new Definition(SymfonyEventDispatcherStub::class)); - $container->setDefinition(LockServiceInterface::class, new Definition(stdClass::class)); + $container->setDefinition(LockerInterface::class, new Definition(stdClass::class)); $container->setDefinition(MessageBusInterface::class, new Definition(MessageBusStub::class)); $container->setDefinition( diff --git a/packages/EasyHttpClient/tests/Bridge/Symfony/Fixtures/app/config/bundles.php b/packages/EasyHttpClient/tests/Bridge/Symfony/Fixtures/app/config/bundles.php index 710953cc0..182ebc50d 100644 --- a/packages/EasyHttpClient/tests/Bridge/Symfony/Fixtures/app/config/bundles.php +++ b/packages/EasyHttpClient/tests/Bridge/Symfony/Fixtures/app/config/bundles.php @@ -4,7 +4,7 @@ use Doctrine\Bundle\DoctrineBundle\DoctrineBundle; use EonX\EasyEventDispatcher\Bridge\Symfony\EasyEventDispatcherSymfonyBundle; use EonX\EasyHttpClient\Bridge\Symfony\EasyHttpClientSymfonyBundle; -use EonX\EasyLock\Bridge\Symfony\EasyLockSymfonyBundle; +use EonX\EasyLock\Bundle\EasyLockBundle; use EonX\EasyWebhook\Bridge\Symfony\EasyWebhookSymfonyBundle; use Symfony\Bundle\FrameworkBundle\FrameworkBundle; @@ -18,7 +18,7 @@ EasyWebhookSymfonyBundle::class => [ 'all' => true, ], - EasyLockSymfonyBundle::class => [ + EasyLockBundle::class => [ 'all' => true, ], EasyHttpClientSymfonyBundle::class => [ diff --git a/packages/EasyLock/src/Bridge/Symfony/DependencyInjection/Compiler/RegisterLockStoreServicePass.php b/packages/EasyLock/bundle/CompilerPass/RegisterLockStoreServiceCompilerPass.php similarity index 80% rename from packages/EasyLock/src/Bridge/Symfony/DependencyInjection/Compiler/RegisterLockStoreServicePass.php rename to packages/EasyLock/bundle/CompilerPass/RegisterLockStoreServiceCompilerPass.php index 23012f1f6..37cf07953 100644 --- a/packages/EasyLock/src/Bridge/Symfony/DependencyInjection/Compiler/RegisterLockStoreServicePass.php +++ b/packages/EasyLock/bundle/CompilerPass/RegisterLockStoreServiceCompilerPass.php @@ -1,9 +1,10 @@ getConnectionId( $container, - $this->getParameter($container, BridgeConstantsInterface::PARAM_CONNECTION) + $this->getParameter($container, ConfigParam::Connection->value) ); $arg = $connectionId !== null ? new Reference($connectionId) : self::DEFAULT_CONNECTION_ID; @@ -29,7 +30,7 @@ public function process(ContainerBuilder $container): void ->setFactory([StoreFactory::class, 'createStore']) ->setArguments([$arg]); - $container->setDefinition(BridgeConstantsInterface::SERVICE_STORE, $def); + $container->setDefinition(ConfigServiceId::Store->value, $def); } private function getConnectionId(ContainerBuilder $container, ?string $param = null): ?string diff --git a/packages/EasyLock/src/Bridge/Symfony/DependencyInjection/Compiler/RegisterMessengerMiddlewareCompilerPass.php b/packages/EasyLock/bundle/CompilerPass/RegisterMessengerMiddlewareCompilerPass.php similarity index 85% rename from packages/EasyLock/src/Bridge/Symfony/DependencyInjection/Compiler/RegisterMessengerMiddlewareCompilerPass.php rename to packages/EasyLock/bundle/CompilerPass/RegisterMessengerMiddlewareCompilerPass.php index dc3207c94..cf212a48d 100644 --- a/packages/EasyLock/src/Bridge/Symfony/DependencyInjection/Compiler/RegisterMessengerMiddlewareCompilerPass.php +++ b/packages/EasyLock/bundle/CompilerPass/RegisterMessengerMiddlewareCompilerPass.php @@ -1,10 +1,10 @@ hasParameter(BridgeConstantsInterface::PARAM_MESSENGER_MIDDLEWARE_AUTO_REGISTER) - && $container->getParameter(BridgeConstantsInterface::PARAM_MESSENGER_MIDDLEWARE_AUTO_REGISTER); + return $container->hasParameter(ConfigParam::MessengerMiddlewareAutoRegister->value) + && $container->getParameter(ConfigParam::MessengerMiddlewareAutoRegister->value); } } diff --git a/packages/EasyLock/src/Bridge/Symfony/EasyLockSymfonyBundle.php b/packages/EasyLock/bundle/EasyLockBundle.php similarity index 58% rename from packages/EasyLock/src/Bridge/Symfony/EasyLockSymfonyBundle.php rename to packages/EasyLock/bundle/EasyLockBundle.php index 70f5ef13f..77006fed2 100644 --- a/packages/EasyLock/src/Bridge/Symfony/EasyLockSymfonyBundle.php +++ b/packages/EasyLock/bundle/EasyLockBundle.php @@ -1,21 +1,19 @@ path = \realpath(__DIR__); @@ -24,33 +22,33 @@ public function __construct() public function build(ContainerBuilder $container): void { $container - ->addCompilerPass(new RegisterLockStoreServicePass()) + ->addCompilerPass(new RegisterLockStoreServiceCompilerPass()) // -9 to run before easy-async and easy-batch so middleware is after ->addCompilerPass(new RegisterMessengerMiddlewareCompilerPass(), priority: -9); } public function configure(DefinitionConfigurator $definition): void { - $definition->import(__DIR__ . '/Resources/config/definition.php'); + $definition->import('config/definition.php'); } public function loadExtension(array $config, ContainerConfigurator $container, ContainerBuilder $builder): void { - $container->import(__DIR__ . '/Resources/config/services.php'); + $container->import('config/services.php'); $container ->parameters() - ->set(BridgeConstantsInterface::PARAM_CONNECTION, $config['connection']); + ->set(ConfigParam::Connection->value, $config['connection']); if (\class_exists(MessengerPass::class)) { $container ->parameters() ->set( - BridgeConstantsInterface::PARAM_MESSENGER_MIDDLEWARE_AUTO_REGISTER, + ConfigParam::MessengerMiddlewareAutoRegister->value, $config['messenger_middleware_auto_register'] ?? true ); - $container->import(__DIR__ . '/Resources/config/messenger_middleware.php'); + $container->import('config/messenger_middleware.php'); } } } diff --git a/packages/EasyLock/bundle/Enum/BundleParam.php b/packages/EasyLock/bundle/Enum/BundleParam.php new file mode 100644 index 000000000..8b00f38b6 --- /dev/null +++ b/packages/EasyLock/bundle/Enum/BundleParam.php @@ -0,0 +1,9 @@ +services(); $services ->set(ProcessWithLockMiddleware::class) - ->call('setLockService', [service(LockServiceInterface::class)]); + ->call('setLockService', [service(LockerInterface::class)]); }; diff --git a/packages/EasyLock/bundle/config/services.php b/packages/EasyLock/bundle/config/services.php new file mode 100644 index 000000000..eb33de2bf --- /dev/null +++ b/packages/EasyLock/bundle/config/services.php @@ -0,0 +1,23 @@ +services(); + + $services + ->set(LockerInterface::class, Locker::class) + ->arg('$store', service(ConfigServiceId::Store->value)) + ->tag('monolog.logger', ['channel' => BundleParam::LogChannel->value]); + + $services + ->set(EasyLockDoctrineSchemaListener::class) + ->arg('$persistingStore', service(ConfigServiceId::Store->value)); +}; diff --git a/packages/EasyLock/composer.json b/packages/EasyLock/composer.json index b452f15f0..9b80d37ca 100644 --- a/packages/EasyLock/composer.json +++ b/packages/EasyLock/composer.json @@ -5,25 +5,39 @@ "license": "MIT", "require": { "php": "^8.2", - "symfony/lock": "^6.4" + "doctrine/dbal": "^3.0", + "doctrine/doctrine-bundle": "^2.8", + "doctrine/orm": "^2.14", + "symfony/config": "^6.4", + "symfony/dependency-injection": "^6.4", + "symfony/http-kernel": "^6.4", + "symfony/lock": "^6.4", + "symfony/service-contracts": "^3.5" }, "require-dev": { - "doctrine/orm": "^2.14", "laravel/lumen-framework": "^9.1", - "phpunit/phpunit": "^10.2", - "symfony/symfony": "^6.4" + "phpunit/phpunit": "^10.2" }, "autoload": { "psr-4": { "EonX\\EasyLock\\": "src", - "EonX\\EasyLock\\Bridge\\Symfony\\": "src/Bridge/Symfony" + "EonX\\EasyLock\\Bundle\\": "bundle", + "EonX\\EasyLock\\Laravel\\": "laravel" } }, "autoload-dev": { "psr-4": { - "EonX\\EasyLock\\Tests\\": "tests" + "EonX\\EasyLock\\Tests\\": "tests", + "EonX\\EasyLock\\Tests\\Unit\\": "tests/Unit/src", + "EonX\\EasyLock\\Tests\\Unit\\Bundle\\": "tests/Unit/bundle", + "EonX\\EasyLock\\Tests\\Unit\\Laravel\\": "tests/Unit/laravel" } }, + "suggest": { + "eonx-com/easy-async": "For EasyAsync integration", + "eonx-com/easy-logging": "For EasyLogging integration", + "symfony/messenger": "For Symfony Messenger integration" + }, "extra": { "branch-alias": { "dev-master": "5.12-dev" diff --git a/packages/EasyLock/docs/laravel/install.md b/packages/EasyLock/docs/laravel/install.md index 797dd224c..31f447d32 100644 --- a/packages/EasyLock/docs/laravel/install.md +++ b/packages/EasyLock/docs/laravel/install.md @@ -16,7 +16,7 @@ not familiar with this concept make sure to have a look at the [documentation][1 'providers' => [ // Other Service Providers... - \EonX\EasyLock\Bridge\Laravel\EasyLockServiceProvider::class, + \EonX\EasyLock\Laravel\EasyLockServiceProvider::class, ], ``` @@ -35,7 +35,7 @@ $app = new Laravel\Lumen\Application(\dirname(__DIR__)); // Other actions... -$app->register(\EonX\EasyLock\Bridge\Laravel\EasyLockServiceProvider::class); +$app->register(\EonX\EasyLock\Laravel\EasyLockServiceProvider::class); ``` [1]: https://laravel.com/docs/5.8/providers diff --git a/packages/EasyLock/docs/symfony/install.md b/packages/EasyLock/docs/symfony/install.md index 783fc82ea..c16492f2b 100644 --- a/packages/EasyLock/docs/symfony/install.md +++ b/packages/EasyLock/docs/symfony/install.md @@ -16,7 +16,7 @@ yourself: return [ // Other bundles ... - EonX\EasyLock\Bridge\Symfony\EasyLockSymfonyBundle::class => ['all' => true], + EonX\EasyLock\Bundle\EasyLockBundle::class => ['all' => true], ]; ``` @@ -28,8 +28,8 @@ time. This package comes with a Messenger Middleware handling lock out of the box. Two options are available: -- Make your message implement `EonX\EasyLock\Interfaces\WithLockDataInterface` -- Add `EonX\EasyLock\Bridge\Symfony\Messenger\WithLockDataStamp` to the envelope +- Make your message implement `EonX\EasyLock\Common\ValueObject\WithLockDataInterface` +- Add `EonX\EasyLock\Messenger\Stamp\WithLockDataStamp` to the envelope ::: tip Remember to update your messenger configuration to add the middleware diff --git a/packages/EasyLock/src/Bridge/Laravel/EasyLockServiceProvider.php b/packages/EasyLock/laravel/EasyLockServiceProvider.php similarity index 63% rename from packages/EasyLock/src/Bridge/Laravel/EasyLockServiceProvider.php rename to packages/EasyLock/laravel/EasyLockServiceProvider.php index 26a61bcd6..03f3bc207 100644 --- a/packages/EasyLock/src/Bridge/Laravel/EasyLockServiceProvider.php +++ b/packages/EasyLock/laravel/EasyLockServiceProvider.php @@ -1,11 +1,12 @@ app->singleton( - BridgeConstantsInterface::SERVICE_STORE, + ConfigServiceId::Store->value, static function (Container $app): PersistingStoreInterface { // If connection from config doesn't exist in container, use flock by default - $conn = $app->has(BridgeConstantsInterface::SERVICE_CONNECTION) - ? $app->make(BridgeConstantsInterface::SERVICE_CONNECTION) + $conn = $app->has(ConfigServiceId::Connection->value) + ? $app->make(ConfigServiceId::Connection->value) : self::DEFAULT_CONNECTION_ID; return StoreFactory::createStore($conn); @@ -32,14 +33,14 @@ static function (Container $app): PersistingStoreInterface { ); $this->app->singleton( - LockServiceInterface::class, - static function (Container $app): LockServiceInterface { + LockerInterface::class, + static function (Container $app): LockerInterface { $loggerParams = \interface_exists(EasyLoggingBridgeConstants::class) - ? [EasyLoggingBridgeConstants::KEY_CHANNEL => BridgeConstantsInterface::LOG_CHANNEL] + ? [EasyLoggingBridgeConstants::KEY_CHANNEL => BundleParam::LogChannel] : []; - return new LockService( - $app->make(BridgeConstantsInterface::SERVICE_STORE), + return new Locker( + $app->make(ConfigServiceId::Store->value), $app->make(LoggerInterface::class, $loggerParams) ); } diff --git a/packages/EasyLock/src/Bridge/BridgeConstantsInterface.php b/packages/EasyLock/src/Bridge/BridgeConstantsInterface.php deleted file mode 100644 index f5eb8f04d..000000000 --- a/packages/EasyLock/src/Bridge/BridgeConstantsInterface.php +++ /dev/null @@ -1,17 +0,0 @@ -services(); - - $services - ->set(LockServiceInterface::class, LockService::class) - ->arg('$store', service(BridgeConstantsInterface::SERVICE_STORE)) - ->tag('monolog.logger', ['channel' => BridgeConstantsInterface::LOG_CHANNEL]); - - $services - ->set(EasyLockDoctrineSchemaListener::class) - ->arg('$persistingStore', service(BridgeConstantsInterface::SERVICE_STORE)); -}; diff --git a/packages/EasyLock/src/Interfaces/EasyLockExceptionInterface.php b/packages/EasyLock/src/Common/Exception/EasyLockExceptionInterface.php similarity index 74% rename from packages/EasyLock/src/Interfaces/EasyLockExceptionInterface.php rename to packages/EasyLock/src/Common/Exception/EasyLockExceptionInterface.php index 5552ea041..c50453c0a 100644 --- a/packages/EasyLock/src/Interfaces/EasyLockExceptionInterface.php +++ b/packages/EasyLock/src/Common/Exception/EasyLockExceptionInterface.php @@ -1,7 +1,7 @@ locker = $locker; + } + + protected function processWithLock(WithLockDataInterface $withLockData, Closure $func): mixed + { + return $this->locker->processWithLock($withLockData->getLockData(), $func); + } +} diff --git a/packages/EasyLock/src/LockData.php b/packages/EasyLock/src/Common/ValueObject/LockData.php similarity index 93% rename from packages/EasyLock/src/LockData.php rename to packages/EasyLock/src/Common/ValueObject/LockData.php index 956a04667..644ce78bb 100644 --- a/packages/EasyLock/src/LockData.php +++ b/packages/EasyLock/src/Common/ValueObject/LockData.php @@ -1,9 +1,7 @@ lockService = $lockService; - } - - protected function processWithLock(WithLockDataInterface $withLockData, Closure $func): mixed - { - return $this->lockService->processWithLock($withLockData->getLockData(), $func); - } -} diff --git a/packages/EasyLock/tests/Bridge/Laravel/EasyLockServiceProviderTest.php b/packages/EasyLock/tests/Bridge/Laravel/EasyLockServiceProviderTest.php deleted file mode 100644 index 52b7a6229..000000000 --- a/packages/EasyLock/tests/Bridge/Laravel/EasyLockServiceProviderTest.php +++ /dev/null @@ -1,17 +0,0 @@ -getApp(); - - self::assertInstanceOf(LockService::class, $app->get(LockServiceInterface::class)); - } -} diff --git a/packages/EasyLock/tests/Bridge/Laravel/storage/logs/lumen-2020-07-24.log b/packages/EasyLock/tests/Bridge/Laravel/storage/logs/lumen-2020-07-24.log deleted file mode 100644 index 42acde702..000000000 --- a/packages/EasyLock/tests/Bridge/Laravel/storage/logs/lumen-2020-07-24.log +++ /dev/null @@ -1,20 +0,0 @@ -[2020-07-24 05:30:49] production.ERROR: Symfony\Component\Debug\Exception\FatalErrorException: Illuminate\Support\ServiceProvider::mergeConfigFrom(): Failed opening required '/Volumes/Dev/repositories/eonx-com/easy-monorepo/packages/EasyLock/src/Bridge/Laravel/config/easy-lock.php' (include_path='.:/usr/local/Cellar/php@7.3/7.3.17_1/share/php@7.3/pear') in /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/illuminate/support/ServiceProvider.php:72 -Stack trace: -#0 /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/laravel/lumen-framework/src/Concerns/RegistersExceptionHandlers.php(54): Laravel\Lumen\Application->handleShutdown() -#1 [internal function]: Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}() -#2 {main} {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 64): Illuminate\\Support\\ServiceProvider::mergeConfigFrom(): Failed opening required '/Volumes/Dev/repositories/eonx-com/easy-monorepo/packages/EasyLock/src/Bridge/Laravel/config/easy-lock.php' (include_path='.:/usr/local/Cellar/php@7.3/7.3.17_1/share/php@7.3/pear') at /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/illuminate/support/ServiceProvider.php:72) -[stacktrace] -#0 /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/laravel/lumen-framework/src/Concerns/RegistersExceptionHandlers.php(54): Laravel\\Lumen\\Application->handleShutdown() -#1 [internal function]: Laravel\\Lumen\\Application->Laravel\\Lumen\\Concerns\\{closure}() -#2 {main} -"} -[2020-07-24 05:31:19] production.ERROR: Symfony\Component\Debug\Exception\FatalErrorException: Illuminate\Support\ServiceProvider::mergeConfigFrom(): Failed opening required '/Volumes/Dev/repositories/eonx-com/easy-monorepo/packages/EasyLock/src/Bridge/Laravel/config/easy-lock.php' (include_path='.:/usr/local/Cellar/php@7.3/7.3.17_1/share/php@7.3/pear') in /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/illuminate/support/ServiceProvider.php:72 -Stack trace: -#0 /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/laravel/lumen-framework/src/Concerns/RegistersExceptionHandlers.php(54): Laravel\Lumen\Application->handleShutdown() -#1 [internal function]: Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}() -#2 {main} {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 64): Illuminate\\Support\\ServiceProvider::mergeConfigFrom(): Failed opening required '/Volumes/Dev/repositories/eonx-com/easy-monorepo/packages/EasyLock/src/Bridge/Laravel/config/easy-lock.php' (include_path='.:/usr/local/Cellar/php@7.3/7.3.17_1/share/php@7.3/pear') at /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/illuminate/support/ServiceProvider.php:72) -[stacktrace] -#0 /Volumes/Dev/repositories/eonx-com/easy-monorepo/vendor/laravel/lumen-framework/src/Concerns/RegistersExceptionHandlers.php(54): Laravel\\Lumen\\Application->handleShutdown() -#1 [internal function]: Laravel\\Lumen\\Application->Laravel\\Lumen\\Concerns\\{closure}() -#2 {main} -"} diff --git a/packages/EasyLock/tests/Bridge/Symfony/Fixtures/config/in_memory_connection.yaml b/packages/EasyLock/tests/Bridge/Symfony/Fixtures/config/in_memory_connection.yaml deleted file mode 100644 index cad8170eb..000000000 --- a/packages/EasyLock/tests/Bridge/Symfony/Fixtures/config/in_memory_connection.yaml +++ /dev/null @@ -1,8 +0,0 @@ -easy_lock: - connection: in_memory_connection - -services: - in_memory_connection: - class: Doctrine\DBAL\Connection - factory: [ 'Doctrine\DBAL\DriverManager', 'getConnection' ] - arguments: [ { 'url': 'sqlite:///:memory:' } ] diff --git a/packages/EasyLock/tests/Fixture/config/in_memory_connection.php b/packages/EasyLock/tests/Fixture/config/in_memory_connection.php new file mode 100644 index 000000000..15f40828a --- /dev/null +++ b/packages/EasyLock/tests/Fixture/config/in_memory_connection.php @@ -0,0 +1,18 @@ +connection('in_memory_connection'); + + $services = $containerConfigurator->services(); + + $services->set('in_memory_connection', Connection::class) + ->factory([DriverManager::class, 'getConnection']) + ->arg('$params', ['url' => 'sqlite:///:memory:']); +}; diff --git a/packages/EasyLock/tests/Bridge/Symfony/Stubs/KernelStub.php b/packages/EasyLock/tests/Stub/HttpKernel/KernelStub.php similarity index 90% rename from packages/EasyLock/tests/Bridge/Symfony/Stubs/KernelStub.php rename to packages/EasyLock/tests/Stub/HttpKernel/KernelStub.php index 63d647b4e..0005cdc48 100644 --- a/packages/EasyLock/tests/Bridge/Symfony/Stubs/KernelStub.php +++ b/packages/EasyLock/tests/Stub/HttpKernel/KernelStub.php @@ -1,9 +1,9 @@ exists($var)) { $fs->remove($var); diff --git a/packages/EasyLock/tests/Bridge/Symfony/AbstractSymfonyTestCase.php b/packages/EasyLock/tests/Unit/bundle/AbstractSymfonyTestCase.php similarity index 68% rename from packages/EasyLock/tests/Bridge/Symfony/AbstractSymfonyTestCase.php rename to packages/EasyLock/tests/Unit/bundle/AbstractSymfonyTestCase.php index 0b0ef267f..20c5db97f 100644 --- a/packages/EasyLock/tests/Bridge/Symfony/AbstractSymfonyTestCase.php +++ b/packages/EasyLock/tests/Unit/bundle/AbstractSymfonyTestCase.php @@ -1,13 +1,13 @@ [null]; - yield 'in memory connection' => [[__DIR__ . '/Fixtures/config/in_memory_connection.yaml']]; + yield 'in memory connection' => [[__DIR__ . '/../../Fixture/config/in_memory_connection.php']]; } /** @@ -28,6 +28,6 @@ public function testSanity(?array $configs = null): void $container = $this->getKernel($configs) ->getContainer(); - self::assertInstanceOf(LockService::class, $container->get(LockServiceInterface::class)); + self::assertInstanceOf(Locker::class, $container->get(LockerInterface::class)); } } diff --git a/packages/EasyLock/tests/Bridge/Laravel/AbstractLaravelTestCase.php b/packages/EasyLock/tests/Unit/laravel/AbstractLaravelTestCase.php similarity index 63% rename from packages/EasyLock/tests/Bridge/Laravel/AbstractLaravelTestCase.php rename to packages/EasyLock/tests/Unit/laravel/AbstractLaravelTestCase.php index 2120a4f2f..053d87cb3 100644 --- a/packages/EasyLock/tests/Bridge/Laravel/AbstractLaravelTestCase.php +++ b/packages/EasyLock/tests/Unit/laravel/AbstractLaravelTestCase.php @@ -1,15 +1,15 @@ app = new Application(__DIR__); $this->app->register(EasyLockServiceProvider::class); $this->app->instance( - BridgeConstantsInterface::SERVICE_CONNECTION, + ConfigServiceId::Connection->value, DriverManager::getConnection([ 'url' => 'sqlite:///:memory:', ]) diff --git a/packages/EasyLock/tests/Unit/laravel/EasyLockServiceProviderTest.php b/packages/EasyLock/tests/Unit/laravel/EasyLockServiceProviderTest.php new file mode 100644 index 000000000..59eee22a2 --- /dev/null +++ b/packages/EasyLock/tests/Unit/laravel/EasyLockServiceProviderTest.php @@ -0,0 +1,17 @@ +getApp(); + + self::assertInstanceOf(Locker::class, $app->get(LockerInterface::class)); + } +} diff --git a/packages/EasyLock/tests/LockDataTest.php b/packages/EasyLock/tests/Unit/src/Common/ValueObject/LockDataTest.php similarity index 63% rename from packages/EasyLock/tests/LockDataTest.php rename to packages/EasyLock/tests/Unit/src/Common/ValueObject/LockDataTest.php index c742315f3..1874ca667 100644 --- a/packages/EasyLock/tests/LockDataTest.php +++ b/packages/EasyLock/tests/Unit/src/Common/ValueObject/LockDataTest.php @@ -1,11 +1,12 @@ setApplication($app); $event1 = $schedule->command('list', ['-q']); $event2 = $schedule->command('list', ['-q']); - $lockServiceProphecy = $this->prophesize(LockServiceInterface::class); + $lockServiceProphecy = $this->prophesize(LockerInterface::class); $lockServiceProphecy->createLock($event1->getLockResource(), $event1->getMaxLockTime()) ->shouldBeCalled(); - $lockProphecy = $this->prophesize(LockInterface::class); + $lockProphecy = $this->prophesize(LockerInterface::class); $lockProphecy->acquire() ->willReturn(true); $lockProphecy->release() ->shouldBeCalled(); $lockServiceProphecy->createLock($event2->getLockResource(), $event2->getMaxLockTime()) ->willReturn($lockProphecy); - /** @var \EonX\EasyLock\Interfaces\LockServiceInterface $lockService */ + /** @var \EonX\EasyLock\Common\Locker\LockerInterface $lockService */ $lockService = $lockServiceProphecy->reveal(); $eventDispatcherProphecy = $this->prophesize(EventDispatcherInterface::class); $eventDispatcherProphecy->dispatch(new CommandExecutedEvent($event1)) diff --git a/packages/EasyWebhook/src/Bridge/Laravel/EasyWebhookServiceProvider.php b/packages/EasyWebhook/src/Bridge/Laravel/EasyWebhookServiceProvider.php index ec9fc1694..24d16e34d 100644 --- a/packages/EasyWebhook/src/Bridge/Laravel/EasyWebhookServiceProvider.php +++ b/packages/EasyWebhook/src/Bridge/Laravel/EasyWebhookServiceProvider.php @@ -4,7 +4,7 @@ namespace EonX\EasyWebhook\Bridge\Laravel; use EonX\EasyEventDispatcher\Interfaces\EventDispatcherInterface; -use EonX\EasyLock\Interfaces\LockServiceInterface; +use EonX\EasyLock\Common\Locker\LockerInterface; use EonX\EasyLogging\Bridge\BridgeConstantsInterface as EasyLoggingBridgeConstants; use EonX\EasyWebhook\Async\NullAsyncDispatcher; use EonX\EasyWebhook\Bridge\BridgeConstantsInterface; @@ -97,7 +97,7 @@ private function registerCoreMiddleware(): void $coreMiddlewareList = [ // BEFORE MIDDLEWARE LockMiddleware::class => static fn (Container $app): LockMiddleware => new LockMiddleware( - $app->make(LockServiceInterface::class), + $app->make(LockerInterface::class), null, MiddlewareInterface::PRIORITY_CORE_BEFORE - 6 ), diff --git a/packages/EasyWebhook/src/Middleware/LockMiddleware.php b/packages/EasyWebhook/src/Middleware/LockMiddleware.php index 519785e57..30faaee36 100644 --- a/packages/EasyWebhook/src/Middleware/LockMiddleware.php +++ b/packages/EasyWebhook/src/Middleware/LockMiddleware.php @@ -3,9 +3,9 @@ namespace EonX\EasyWebhook\Middleware; -use EonX\EasyLock\Interfaces\LockDataInterface; -use EonX\EasyLock\Interfaces\LockServiceInterface; -use EonX\EasyLock\LockData; +use EonX\EasyLock\Common\Locker\LockerInterface; +use EonX\EasyLock\Common\ValueObject\LockData; +use EonX\EasyLock\Common\ValueObject\LockDataInterface; use EonX\EasyWebhook\Interfaces\StackInterface; use EonX\EasyWebhook\Interfaces\WebhookInterface; use EonX\EasyWebhook\Interfaces\WebhookResultInterface; @@ -18,7 +18,7 @@ final class LockMiddleware extends AbstractMiddleware private string $resourcePattern; public function __construct( - private LockServiceInterface $lockService, + private LockerInterface $lockService, ?string $lockResourcePattern = null, ?int $priority = null, ) { diff --git a/packages/EasyWebhook/tests/Bridge/Laravel/AbstractLumenTestCase.php b/packages/EasyWebhook/tests/Bridge/Laravel/AbstractLumenTestCase.php index a548d47fb..3a1fc04b9 100644 --- a/packages/EasyWebhook/tests/Bridge/Laravel/AbstractLumenTestCase.php +++ b/packages/EasyWebhook/tests/Bridge/Laravel/AbstractLumenTestCase.php @@ -4,7 +4,7 @@ namespace EonX\EasyWebhook\Tests\Bridge\Laravel; use EonX\EasyEventDispatcher\Bridge\Laravel\EasyEventDispatcherServiceProvider; -use EonX\EasyLock\Bridge\Laravel\EasyLockServiceProvider; +use EonX\EasyLock\Laravel\EasyLockServiceProvider; use EonX\EasyWebhook\Bridge\Laravel\EasyWebhookServiceProvider; use EonX\EasyWebhook\Tests\AbstractTestCase; use Laravel\Lumen\Application; diff --git a/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php b/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php index 47600525d..c400bb86a 100644 --- a/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php +++ b/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php @@ -5,10 +5,10 @@ use Doctrine\DBAL\Connection; use EonX\EasyEventDispatcher\Interfaces\EventDispatcherInterface; -use EonX\EasyLock\Interfaces\LockServiceInterface; +use EonX\EasyLock\Common\Locker\LockerInterface; use EonX\EasyWebhook\Bridge\Symfony\EasyWebhookSymfonyBundle; use EonX\EasyWebhook\Tests\Stubs\EventDispatcherStub; -use EonX\EasyWebhook\Tests\Stubs\LockServiceStub; +use EonX\EasyWebhook\Tests\Stubs\LockerServiceStub; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Symfony\Component\Config\Loader\LoaderInterface; @@ -42,7 +42,7 @@ public function process(ContainerBuilder $container): void $container->setDefinition(Connection::class, new Definition(EventDispatcherStub::class)); $container->setDefinition(EventDispatcherInterface::class, new Definition(EventDispatcherStub::class)); - $container->setDefinition(LockServiceInterface::class, new Definition(LockServiceStub::class)); + $container->setDefinition(LockerInterface::class, new Definition(LockerServiceStub::class)); $container->setDefinition(MessageBusInterface::class, new Definition(MessageBusStub::class)); $container->setDefinition(LoggerInterface::class, new Definition(NullLogger::class)); diff --git a/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php b/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php index 5f92a0aca..850343370 100644 --- a/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php +++ b/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php @@ -3,11 +3,11 @@ namespace EonX\EasyWebhook\Tests\Middleware; -use EonX\EasyLock\Interfaces\LockDataInterface; +use EonX\EasyLock\Common\ValueObject\LockDataInterface; use EonX\EasyWebhook\Interfaces\WebhookInterface; use EonX\EasyWebhook\Middleware\LockMiddleware; use EonX\EasyWebhook\Tests\AbstractMiddlewareTestCase; -use EonX\EasyWebhook\Tests\Stubs\LockServiceStub; +use EonX\EasyWebhook\Tests\Stubs\LockerServiceStub; use EonX\EasyWebhook\Webhook; use EonX\EasyWebhook\WebhookResult; use PHPUnit\Framework\Attributes\DataProvider; @@ -52,12 +52,11 @@ public function testProcess(WebhookInterface $webhook, bool $shouldLock, ?bool $ $canProcess ??= true; $expectedResource = \sprintf('easy_webhook_send_%s', $webhook->getId()); $expectedResult = new WebhookResult($webhook); - $lockService = new LockServiceStub($canProcess); - $middleware = new LockMiddleware($lockService); + $lockerService = new LockerServiceStub($canProcess); + $middleware = new LockMiddleware($lockerService); $result = $this->process($middleware, $webhook, $expectedResult); - /** @var \EonX\EasyLock\Interfaces\LockDataInterface $lockData */ - $lockData = $lockService->getLockData(); + $lockData = $lockerService->getLockData(); switch ($shouldLock) { case true: @@ -66,7 +65,7 @@ public function testProcess(WebhookInterface $webhook, bool $shouldLock, ?bool $ break; case false: - self::assertNull($lockService->getLockData()); + self::assertNull($lockerService->getLockData()); } $canProcess diff --git a/packages/EasyWebhook/tests/Stubs/LockServiceStub.php b/packages/EasyWebhook/tests/Stubs/LockerServiceStub.php similarity index 83% rename from packages/EasyWebhook/tests/Stubs/LockServiceStub.php rename to packages/EasyWebhook/tests/Stubs/LockerServiceStub.php index 5db18ccf6..6e49659b1 100644 --- a/packages/EasyWebhook/tests/Stubs/LockServiceStub.php +++ b/packages/EasyWebhook/tests/Stubs/LockerServiceStub.php @@ -4,12 +4,12 @@ namespace EonX\EasyWebhook\Tests\Stubs; use Closure; -use EonX\EasyLock\Interfaces\LockDataInterface; -use EonX\EasyLock\Interfaces\LockServiceInterface; +use EonX\EasyLock\Common\Locker\LockerInterface; +use EonX\EasyLock\Common\ValueObject\LockDataInterface; use RuntimeException; use Symfony\Component\Lock\LockInterface; -final class LockServiceStub implements LockServiceInterface +final class LockerServiceStub implements LockerInterface { private bool $canProcess; diff --git a/quality/rector.php b/quality/rector.php index 65aaa82ea..b1e55fa47 100644 --- a/quality/rector.php +++ b/quality/rector.php @@ -59,7 +59,7 @@ 'packages/EasyBatch/tests/Bridge/Symfony/Stubs/KernelStub.php', 'packages/EasyBugsnag/tests/Bridge/Symfony/Stubs/KernelStub.php', 'packages/EasyDoctrine/src/Bridge/Symfony/Resources/config/services.php', - 'packages/EasyLock/src/Bridge/Symfony/DependencyInjection/Compiler/RegisterLockStoreServicePass.php', + 'packages/EasyLock/bundle/CompilerPass/RegisterLockStoreServiceCompilerPass.php', 'packages/EasyPagination/tests/Bridge/Symfony/Stubs/KernelStub.php', ], JsonThrowOnErrorRector::class, From 580b5aea204961bac8ab70b548225b8da93e2510 Mon Sep 17 00:00:00 2001 From: Aleksey Polyvanyi Date: Fri, 21 Jun 2024 20:54:27 +0200 Subject: [PATCH 2/5] -fix tests and quality --- packages/EasyActivity/composer.json | 1 + quality/ecs.php | 4 ++++ quality/rector.php | 1 + 3 files changed, 6 insertions(+) diff --git a/packages/EasyActivity/composer.json b/packages/EasyActivity/composer.json index c6c4fd133..471e729c7 100644 --- a/packages/EasyActivity/composer.json +++ b/packages/EasyActivity/composer.json @@ -15,6 +15,7 @@ "symfony/event-dispatcher": "^6.4", "symfony/http-kernel": "^6.4", "symfony/messenger": "^6.4", + "symfony/property-access": "^6.4", "symfony/serializer": "^6.4", "symfony/uid": "^6.4" }, diff --git a/quality/ecs.php b/quality/ecs.php index fd192520f..7ffb9ef57 100644 --- a/quality/ecs.php +++ b/quality/ecs.php @@ -15,6 +15,7 @@ use EonX\EasyQuality\Sniffs\Functions\DisallowNonNullDefaultValueSniff; use EonX\EasyQuality\ValueObject\EasyQualitySetList; use PHP_CodeSniffer\Standards\Generic\Sniffs\Files\LineLengthSniff; +use PhpCsFixer\Fixer\ClassNotation\ClassDefinitionFixer; use PhpCsFixer\Fixer\ClassNotation\OrderedClassElementsFixer; use PhpCsFixer\Fixer\ClassUsage\DateTimeImmutableFixer; use PhpCsFixer\Fixer\ControlStructure\TrailingCommaInMultilineFixer; @@ -71,6 +72,9 @@ 'packages/EasyWebhook/src/Bridge/Laravel/Jobs/SendWebhookJob.php', ], BlankLineAfterOpeningTagFixer::class => null, + ClassDefinitionFixer::class => [ + 'packages/EasyLock/src/Common/Exception/LockAcquiringException.php', + ], DateTimeImmutableFixer::class => null, DisallowMixedTypeHintSniff::class => [ 'packages/EasySecurity/src/Bridge/Symfony/Security/Voters/*', diff --git a/quality/rector.php b/quality/rector.php index b1e55fa47..ffc4b1c20 100644 --- a/quality/rector.php +++ b/quality/rector.php @@ -60,6 +60,7 @@ 'packages/EasyBugsnag/tests/Bridge/Symfony/Stubs/KernelStub.php', 'packages/EasyDoctrine/src/Bridge/Symfony/Resources/config/services.php', 'packages/EasyLock/bundle/CompilerPass/RegisterLockStoreServiceCompilerPass.php', + 'packages/EasyLock/tests/Fixture/config/in_memory_connection.php', 'packages/EasyPagination/tests/Bridge/Symfony/Stubs/KernelStub.php', ], JsonThrowOnErrorRector::class, From bcc79d4687fe527dc98012c3ffb7df35aa334cc3 Mon Sep 17 00:00:00 2001 From: Aleksey Polyvanyi Date: Fri, 21 Jun 2024 20:59:46 +0200 Subject: [PATCH 3/5] -refactor naming --- .../Messenger/ProcessBatchItemMiddleware.php | 4 ++-- .../bundle/config/messenger_middleware.php | 5 +---- packages/EasySchedule/src/ScheduleRunner.php | 4 ++-- .../EasySchedule/tests/ScheduleRunnerTest.php | 15 ++++++++------- .../EasyWebhook/src/Middleware/LockMiddleware.php | 4 ++-- .../tests/Bridge/Symfony/Stubs/KernelStub.php | 4 ++-- .../tests/Middleware/LockMiddlewareTest.php | 4 ++-- .../{LockerServiceStub.php => LockerStub.php} | 2 +- 8 files changed, 20 insertions(+), 22 deletions(-) rename packages/EasyWebhook/tests/Stubs/{LockerServiceStub.php => LockerStub.php} (94%) diff --git a/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php b/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php index 5f0841497..6d2658114 100644 --- a/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php +++ b/packages/EasyBatch/src/Bridge/Symfony/Messenger/ProcessBatchItemMiddleware.php @@ -29,7 +29,7 @@ public function __construct( private readonly BatchItemProcessor $batchItemProcessor, private readonly BatchItemLockFactoryInterface $batchItemLockFactory, private readonly BatchProcessor $batchProcessor, - private readonly LockerInterface $lockService, + private readonly LockerInterface $locker, ) { } @@ -56,7 +56,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope // Since items can be dispatched multiple times to guarantee all items are dispatched // We must protect the processing logic with a lock to make sure the same item isn't processed // by multiple workers concurrently - $result = $this->lockService->processWithLock( + $result = $this->locker->processWithLock( $this->batchItemLockFactory->createFromEnvelope($envelope), function () use ($batchItemStamp, $message, $func) { $batchItem = $this->batchItemRepository->findForProcess($batchItemStamp->getBatchItemId()); diff --git a/packages/EasyLock/bundle/config/messenger_middleware.php b/packages/EasyLock/bundle/config/messenger_middleware.php index d1a396973..e1de9e51b 100644 --- a/packages/EasyLock/bundle/config/messenger_middleware.php +++ b/packages/EasyLock/bundle/config/messenger_middleware.php @@ -3,13 +3,10 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator; -use EonX\EasyLock\Common\Locker\LockerInterface; use EonX\EasyLock\Messenger\Middleware\ProcessWithLockMiddleware; return static function (ContainerConfigurator $container): void { $services = $container->services(); - $services - ->set(ProcessWithLockMiddleware::class) - ->call('setLockService', [service(LockerInterface::class)]); + $services->set(ProcessWithLockMiddleware::class); }; diff --git a/packages/EasySchedule/src/ScheduleRunner.php b/packages/EasySchedule/src/ScheduleRunner.php index 4da3fb49b..81174d9fd 100644 --- a/packages/EasySchedule/src/ScheduleRunner.php +++ b/packages/EasySchedule/src/ScheduleRunner.php @@ -16,7 +16,7 @@ final class ScheduleRunner implements ScheduleRunnerInterface public function __construct( private readonly EventDispatcherInterface $eventDispatcher, - private readonly LockerInterface $lockService, + private readonly LockerInterface $locker, ) { } @@ -30,7 +30,7 @@ public function run(ScheduleInterface $schedule, OutputInterface $output): void $this->ran = true; $description = $event->getDescription(); - $lock = $this->lockService->createLock($event->getLockResource(), $event->getMaxLockTime()); + $lock = $this->locker->createLock($event->getLockResource(), $event->getMaxLockTime()); $output->writeln(\sprintf('Running scheduled command: %s', $description)); diff --git a/packages/EasySchedule/tests/ScheduleRunnerTest.php b/packages/EasySchedule/tests/ScheduleRunnerTest.php index 4cfb937d3..809ef4fc4 100644 --- a/packages/EasySchedule/tests/ScheduleRunnerTest.php +++ b/packages/EasySchedule/tests/ScheduleRunnerTest.php @@ -11,6 +11,7 @@ use Prophecy\PhpUnit\ProphecyTrait; use Symfony\Component\Console\Application; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Lock\LockInterface; final class ScheduleRunnerTest extends AbstractTestCase { @@ -22,18 +23,18 @@ public function testRunSucceedsAndDispatchesEvent(): void $schedule = (new Schedule())->setApplication($app); $event1 = $schedule->command('list', ['-q']); $event2 = $schedule->command('list', ['-q']); - $lockServiceProphecy = $this->prophesize(LockerInterface::class); - $lockServiceProphecy->createLock($event1->getLockResource(), $event1->getMaxLockTime()) + $lockerProphecy = $this->prophesize(LockerInterface::class); + $lockerProphecy->createLock($event1->getLockResource(), $event1->getMaxLockTime()) ->shouldBeCalled(); - $lockProphecy = $this->prophesize(LockerInterface::class); + $lockProphecy = $this->prophesize(LockInterface::class); $lockProphecy->acquire() ->willReturn(true); $lockProphecy->release() ->shouldBeCalled(); - $lockServiceProphecy->createLock($event2->getLockResource(), $event2->getMaxLockTime()) + $lockerProphecy->createLock($event2->getLockResource(), $event2->getMaxLockTime()) ->willReturn($lockProphecy); - /** @var \EonX\EasyLock\Common\Locker\LockerInterface $lockService */ - $lockService = $lockServiceProphecy->reveal(); + /** @var \EonX\EasyLock\Common\Locker\LockerInterface $locker */ + $locker = $lockerProphecy->reveal(); $eventDispatcherProphecy = $this->prophesize(EventDispatcherInterface::class); $eventDispatcherProphecy->dispatch(new CommandExecutedEvent($event1)) ->shouldBeCalled(); @@ -43,7 +44,7 @@ public function testRunSucceedsAndDispatchesEvent(): void $eventDispatcher = $eventDispatcherProphecy->reveal(); /** @var \Symfony\Component\Console\Output\OutputInterface $output */ $output = $this->prophesize(OutputInterface::class)->reveal(); - $scheduleRunner = new ScheduleRunner($eventDispatcher, $lockService); + $scheduleRunner = new ScheduleRunner($eventDispatcher, $locker); $scheduleRunner->run($schedule, $output); diff --git a/packages/EasyWebhook/src/Middleware/LockMiddleware.php b/packages/EasyWebhook/src/Middleware/LockMiddleware.php index 30faaee36..367e137a2 100644 --- a/packages/EasyWebhook/src/Middleware/LockMiddleware.php +++ b/packages/EasyWebhook/src/Middleware/LockMiddleware.php @@ -18,7 +18,7 @@ final class LockMiddleware extends AbstractMiddleware private string $resourcePattern; public function __construct( - private LockerInterface $lockService, + private LockerInterface $locker, ?string $lockResourcePattern = null, ?int $priority = null, ) { @@ -32,7 +32,7 @@ public function process(WebhookInterface $webhook, StackInterface $stack): Webho $func = fn (): WebhookResultInterface => $this->passOn($webhook, $stack); $result = $webhook->getId() !== null && $webhook->isSendNow() - ? $this->lockService->processWithLock($this->getLockData($webhook), $func) + ? $this->locker->processWithLock($this->getLockData($webhook), $func) : $func(); return $result instanceof WebhookResultInterface ? $result : new WebhookResult($webhook); diff --git a/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php b/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php index c400bb86a..3963d1807 100644 --- a/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php +++ b/packages/EasyWebhook/tests/Bridge/Symfony/Stubs/KernelStub.php @@ -8,7 +8,7 @@ use EonX\EasyLock\Common\Locker\LockerInterface; use EonX\EasyWebhook\Bridge\Symfony\EasyWebhookSymfonyBundle; use EonX\EasyWebhook\Tests\Stubs\EventDispatcherStub; -use EonX\EasyWebhook\Tests\Stubs\LockerServiceStub; +use EonX\EasyWebhook\Tests\Stubs\LockerStub; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Symfony\Component\Config\Loader\LoaderInterface; @@ -42,7 +42,7 @@ public function process(ContainerBuilder $container): void $container->setDefinition(Connection::class, new Definition(EventDispatcherStub::class)); $container->setDefinition(EventDispatcherInterface::class, new Definition(EventDispatcherStub::class)); - $container->setDefinition(LockerInterface::class, new Definition(LockerServiceStub::class)); + $container->setDefinition(LockerInterface::class, new Definition(LockerStub::class)); $container->setDefinition(MessageBusInterface::class, new Definition(MessageBusStub::class)); $container->setDefinition(LoggerInterface::class, new Definition(NullLogger::class)); diff --git a/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php b/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php index 850343370..8c98c03e4 100644 --- a/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php +++ b/packages/EasyWebhook/tests/Middleware/LockMiddlewareTest.php @@ -7,7 +7,7 @@ use EonX\EasyWebhook\Interfaces\WebhookInterface; use EonX\EasyWebhook\Middleware\LockMiddleware; use EonX\EasyWebhook\Tests\AbstractMiddlewareTestCase; -use EonX\EasyWebhook\Tests\Stubs\LockerServiceStub; +use EonX\EasyWebhook\Tests\Stubs\LockerStub; use EonX\EasyWebhook\Webhook; use EonX\EasyWebhook\WebhookResult; use PHPUnit\Framework\Attributes\DataProvider; @@ -52,7 +52,7 @@ public function testProcess(WebhookInterface $webhook, bool $shouldLock, ?bool $ $canProcess ??= true; $expectedResource = \sprintf('easy_webhook_send_%s', $webhook->getId()); $expectedResult = new WebhookResult($webhook); - $lockerService = new LockerServiceStub($canProcess); + $lockerService = new LockerStub($canProcess); $middleware = new LockMiddleware($lockerService); $result = $this->process($middleware, $webhook, $expectedResult); diff --git a/packages/EasyWebhook/tests/Stubs/LockerServiceStub.php b/packages/EasyWebhook/tests/Stubs/LockerStub.php similarity index 94% rename from packages/EasyWebhook/tests/Stubs/LockerServiceStub.php rename to packages/EasyWebhook/tests/Stubs/LockerStub.php index 6e49659b1..dfc7f0c77 100644 --- a/packages/EasyWebhook/tests/Stubs/LockerServiceStub.php +++ b/packages/EasyWebhook/tests/Stubs/LockerStub.php @@ -9,7 +9,7 @@ use RuntimeException; use Symfony\Component\Lock\LockInterface; -final class LockerServiceStub implements LockerInterface +final class LockerStub implements LockerInterface { private bool $canProcess; From 7ce405d540e37f892d4c4d7d0ed3a38bf04edcf3 Mon Sep 17 00:00:00 2001 From: Aleksey Polyvanyi Date: Mon, 24 Jun 2024 15:26:20 +0200 Subject: [PATCH 4/5] -refactoring --- .../{ProcessWithLockerTrait.php => ProcessWithLockTrait.php} | 2 +- .../src/Messenger/Middleware/ProcessWithLockMiddleware.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename packages/EasyLock/src/Common/Locker/{ProcessWithLockerTrait.php => ProcessWithLockTrait.php} (95%) diff --git a/packages/EasyLock/src/Common/Locker/ProcessWithLockerTrait.php b/packages/EasyLock/src/Common/Locker/ProcessWithLockTrait.php similarity index 95% rename from packages/EasyLock/src/Common/Locker/ProcessWithLockerTrait.php rename to packages/EasyLock/src/Common/Locker/ProcessWithLockTrait.php index b2270787c..64a23c4df 100644 --- a/packages/EasyLock/src/Common/Locker/ProcessWithLockerTrait.php +++ b/packages/EasyLock/src/Common/Locker/ProcessWithLockTrait.php @@ -7,7 +7,7 @@ use EonX\EasyLock\Common\ValueObject\WithLockDataInterface; use Symfony\Contracts\Service\Attribute\Required; -trait ProcessWithLockerTrait +trait ProcessWithLockTrait { private LockerInterface $locker; diff --git a/packages/EasyLock/src/Messenger/Middleware/ProcessWithLockMiddleware.php b/packages/EasyLock/src/Messenger/Middleware/ProcessWithLockMiddleware.php index 80241ba27..621a8a4e6 100644 --- a/packages/EasyLock/src/Messenger/Middleware/ProcessWithLockMiddleware.php +++ b/packages/EasyLock/src/Messenger/Middleware/ProcessWithLockMiddleware.php @@ -3,7 +3,7 @@ namespace EonX\EasyLock\Messenger\Middleware; -use EonX\EasyLock\Common\Locker\ProcessWithLockerTrait; +use EonX\EasyLock\Common\Locker\ProcessWithLockTrait; use EonX\EasyLock\Common\ValueObject\WithLockDataInterface; use EonX\EasyLock\Messenger\Stamp\WithLockDataStamp; use Symfony\Component\Messenger\Envelope; @@ -13,7 +13,7 @@ final class ProcessWithLockMiddleware implements MiddlewareInterface { - use ProcessWithLockerTrait; + use ProcessWithLockTrait; public function handle(Envelope $envelope, StackInterface $stack): Envelope { From 4b6f7ef1bbaf6f6669ebd8d8c241948ef53572d1 Mon Sep 17 00:00:00 2001 From: Aleksey Polyvanyi Date: Mon, 24 Jun 2024 15:54:39 +0200 Subject: [PATCH 5/5] -refactoring --- packages/EasyLock/composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/EasyLock/composer.json b/packages/EasyLock/composer.json index 9b80d37ca..6d0e868d2 100644 --- a/packages/EasyLock/composer.json +++ b/packages/EasyLock/composer.json @@ -8,6 +8,7 @@ "doctrine/dbal": "^3.0", "doctrine/doctrine-bundle": "^2.8", "doctrine/orm": "^2.14", + "psr/log": "^3.0", "symfony/config": "^6.4", "symfony/dependency-injection": "^6.4", "symfony/http-kernel": "^6.4", @@ -35,7 +36,7 @@ }, "suggest": { "eonx-com/easy-async": "For EasyAsync integration", - "eonx-com/easy-logging": "For EasyLogging integration", + "eonx-com/easy-logging": "For Laravel and EasyLogging integration", "symfony/messenger": "For Symfony Messenger integration" }, "extra": {