From 4210068d53df63aa822cf6b45a8aa75df5bad7b8 Mon Sep 17 00:00:00 2001 From: lotyp Date: Thu, 25 May 2023 12:57:08 +0300 Subject: [PATCH 1/2] feat!: bind laravel container into ORM --- composer.lock | 55 +++++++++---------- .../Laravel/Factories/SpiralFactory.php | 24 ++++++++ .../Registrators/RegisterMigrations.php | 2 +- .../Providers/Registrators/RegisterORM.php | 2 + src/Repository.php | 45 +++++++++++++++ tests/app/Repositories/UserRepository.php | 28 ++-------- .../Repositories/UserRepositoryInterface.php | 11 ++++ 7 files changed, 112 insertions(+), 55 deletions(-) create mode 100644 src/Bridge/Laravel/Factories/SpiralFactory.php create mode 100644 src/Repository.php create mode 100644 tests/app/Repositories/UserRepositoryInterface.php diff --git a/composer.lock b/composer.lock index 62c98a9b..088706c0 100644 --- a/composer.lock +++ b/composer.lock @@ -1263,16 +1263,16 @@ }, { "name": "laravel/framework", - "version": "v10.11.0", + "version": "v10.12.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "21a5b6d9b669f32c10cc8ba776511b5f62599fea" + "reference": "9e6dcff23ab1d4b522bef56074c31625cf077576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/21a5b6d9b669f32c10cc8ba776511b5f62599fea", - "reference": "21a5b6d9b669f32c10cc8ba776511b5f62599fea", + "url": "https://api.github.com/repos/laravel/framework/zipball/9e6dcff23ab1d4b522bef56074c31625cf077576", + "reference": "9e6dcff23ab1d4b522bef56074c31625cf077576", "shasum": "" }, "require": { @@ -1459,7 +1459,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-05-16T13:59:23+00:00" + "time": "2023-05-23T18:04:16+00:00" }, { "name": "laravel/serializable-closure", @@ -7733,22 +7733,22 @@ }, { "name": "orchestra/testbench", - "version": "v8.5.3", + "version": "v8.5.4", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "69d47fba51b5a978d09f856834f3348e84356c91" + "reference": "6c00e046147d7ce1586f279e87139217aaa04bab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/69d47fba51b5a978d09f856834f3348e84356c91", - "reference": "69d47fba51b5a978d09f856834f3348e84356c91", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/6c00e046147d7ce1586f279e87139217aaa04bab", + "reference": "6c00e046147d7ce1586f279e87139217aaa04bab", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "fakerphp/faker": "^1.21", - "laravel/framework": ">=10.8.0 <10.12.0", + "laravel/framework": ">=10.8.0 <10.13.0", "mockery/mockery": "^1.5.1", "orchestra/testbench-core": ">=8.5.0 <8.6.0", "php": "^8.1", @@ -7782,9 +7782,9 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v8.5.3" + "source": "https://github.com/orchestral/testbench/tree/v8.5.4" }, - "time": "2023-05-16T11:46:44+00:00" + "time": "2023-05-24T00:44:58+00:00" }, { "name": "orchestra/testbench-core", @@ -8537,22 +8537,22 @@ }, { "name": "phpstan/extension-installer", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/phpstan/extension-installer.git", - "reference": "f5e02d40f277d28513001976f444d9ff1dc15e9a" + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f5e02d40f277d28513001976f444d9ff1dc15e9a", - "reference": "f5e02d40f277d28513001976f444d9ff1dc15e9a", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f45734bfb9984c6c56c4486b71230355f066a58a", + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a", "shasum": "" }, "require": { "composer-plugin-api": "^2.0", "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.8.0" + "phpstan/phpstan": "^1.9.0" }, "require-dev": { "composer/composer": "^2.0", @@ -8561,12 +8561,7 @@ }, "type": "composer-plugin", "extra": { - "class": "PHPStan\\ExtensionInstaller\\Plugin", - "phpstan/extension-installer": { - "ignore": [ - "phpstan/phpstan-phpunit" - ] - } + "class": "PHPStan\\ExtensionInstaller\\Plugin" }, "autoload": { "psr-4": { @@ -8580,9 +8575,9 @@ "description": "Composer plugin for automatic installation of PHPStan extensions", "support": { "issues": "https://github.com/phpstan/extension-installer/issues", - "source": "https://github.com/phpstan/extension-installer/tree/1.3.0" + "source": "https://github.com/phpstan/extension-installer/tree/1.3.1" }, - "time": "2023-04-18T13:08:02+00:00" + "time": "2023-05-24T08:59:17+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -11797,16 +11792,16 @@ }, { "name": "wayofdev/cs-fixer-config", - "version": "v1.2.4", + "version": "v1.2.5", "source": { "type": "git", "url": "https://github.com/wayofdev/php-cs-fixer-config.git", - "reference": "2015299e434c88019f72d11a5a73286538efd513" + "reference": "f31f0edcd247931e38db60ef827ad0a5f0261e9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wayofdev/php-cs-fixer-config/zipball/2015299e434c88019f72d11a5a73286538efd513", - "reference": "2015299e434c88019f72d11a5a73286538efd513", + "url": "https://api.github.com/repos/wayofdev/php-cs-fixer-config/zipball/f31f0edcd247931e38db60ef827ad0a5f0261e9b", + "reference": "f31f0edcd247931e38db60ef827ad0a5f0261e9b", "shasum": "" }, "require": { @@ -11857,7 +11852,7 @@ "type": "github" } ], - "time": "2023-05-22T22:00:56+00:00" + "time": "2023-05-23T13:48:52+00:00" }, { "name": "zbateson/mail-mime-parser", diff --git a/src/Bridge/Laravel/Factories/SpiralFactory.php b/src/Bridge/Laravel/Factories/SpiralFactory.php new file mode 100644 index 00000000..3f9dac82 --- /dev/null +++ b/src/Bridge/Laravel/Factories/SpiralFactory.php @@ -0,0 +1,24 @@ +app->make($alias, $parameters); + } +} diff --git a/src/Bridge/Laravel/Providers/Registrators/RegisterMigrations.php b/src/Bridge/Laravel/Providers/Registrators/RegisterMigrations.php index 5aea6847..91b5caa7 100644 --- a/src/Bridge/Laravel/Providers/Registrators/RegisterMigrations.php +++ b/src/Bridge/Laravel/Providers/Registrators/RegisterMigrations.php @@ -22,7 +22,7 @@ public function __invoke(Application $app): void $config = $app->get(MigrationConfig::class); return new FileRepository( - config: $config + config: $config, ); }); diff --git a/src/Bridge/Laravel/Providers/Registrators/RegisterORM.php b/src/Bridge/Laravel/Providers/Registrators/RegisterORM.php index 7a8000c6..11cfd2bb 100644 --- a/src/Bridge/Laravel/Providers/Registrators/RegisterORM.php +++ b/src/Bridge/Laravel/Providers/Registrators/RegisterORM.php @@ -14,6 +14,7 @@ use Cycle\ORM\ORMInterface; use Cycle\ORM\SchemaInterface; use Illuminate\Contracts\Foundation\Application; +use WayOfDev\Cycle\Bridge\Laravel\Factories\SpiralFactory; use WayOfDev\Cycle\Schema\Config\SchemaConfig; /** @@ -32,6 +33,7 @@ public function __invoke(Application $app): void return new Factory( dbal: $app->get(DatabaseProviderInterface::class), config: $app->get(RelationConfig::class), + factory: $app->get(SpiralFactory::class), defaultCollectionFactory: $factory ); }); diff --git a/src/Repository.php b/src/Repository.php new file mode 100644 index 00000000..68c3be4b --- /dev/null +++ b/src/Repository.php @@ -0,0 +1,45 @@ + $select + * @param EntityManagerInterface $entityManager + */ + public function __construct( + // @phpstan-ignore-next-line + protected Select $select, + protected EntityManagerInterface $entityManager + ) { + parent::__construct($select); + } + + /** + * @throws Throwable + */ + public function persist(object $entity, bool $cascade = true): void + { + $this->entityManager->persist( + $entity, + $cascade + ); + + $this->entityManager->run(); + } +} diff --git a/tests/app/Repositories/UserRepository.php b/tests/app/Repositories/UserRepository.php index 6863406e..3e7c1f46 100644 --- a/tests/app/Repositories/UserRepository.php +++ b/tests/app/Repositories/UserRepository.php @@ -4,33 +4,13 @@ namespace WayOfDev\App\Repositories; -use Cycle\ORM\EntityManager; -use Cycle\ORM\ORMInterface; -use Cycle\ORM\Select; -use Cycle\ORM\Select\Repository; -use Throwable; use WayOfDev\App\Entities\User; +use WayOfDev\Cycle\Repository; -class UserRepository extends Repository +class UserRepository extends Repository implements UserRepositoryInterface { - private EntityManager $entityManager; - - public function __construct(Select $select, ORMInterface $orm) + public function findByUsername(string $username): ?User { - parent::__construct($select); - $this->entityManager = new EntityManager($orm); - } - - /** - * @throws Throwable - */ - public function persist(User $user, bool $cascade = true): void - { - $this->entityManager->persist( - $user, - $cascade - ); - - $this->entityManager->run(); + return $this->findOne(['username' => $username]); } } diff --git a/tests/app/Repositories/UserRepositoryInterface.php b/tests/app/Repositories/UserRepositoryInterface.php new file mode 100644 index 00000000..e0fbfc2f --- /dev/null +++ b/tests/app/Repositories/UserRepositoryInterface.php @@ -0,0 +1,11 @@ + Date: Thu, 25 May 2023 12:59:08 +0300 Subject: [PATCH 2/2] style: apply cs-fixer --- src/Repository.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Repository.php b/src/Repository.php index 68c3be4b..df854231 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -20,7 +20,6 @@ class Repository extends CycleRepository * Create repository linked to one specific selector. * * @param Select $select - * @param EntityManagerInterface $entityManager */ public function __construct( // @phpstan-ignore-next-line