From 49daf9fbb661cd1893a0c5308cd79bdbdae806ab Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Tue, 16 Dec 2025 09:11:53 +0100 Subject: [PATCH] Remove AbstractDatabaseCommand --- .../Command/Db/AbstractDatabaseCommand.php | 33 ------------------- .../src/Command/Db/CreateDatabaseCommand.php | 22 ++++++++++--- .../src/Command/Db/MigrateDatabaseCommand.php | 22 ++++++++++--- 3 files changed, 34 insertions(+), 43 deletions(-) delete mode 100644 module/CLI/src/Command/Db/AbstractDatabaseCommand.php diff --git a/module/CLI/src/Command/Db/AbstractDatabaseCommand.php b/module/CLI/src/Command/Db/AbstractDatabaseCommand.php deleted file mode 100644 index b7bfbc9d..00000000 --- a/module/CLI/src/Command/Db/AbstractDatabaseCommand.php +++ /dev/null @@ -1,33 +0,0 @@ -locker, - LockConfig::blocking($this->getName() ?? static::class), - new SymfonyStyle($input, $output), - fn () => $this->lockedExecute($input, $output), - ); - } - - abstract protected function lockedExecute(InputInterface $input, OutputInterface $output): int; -} diff --git a/module/CLI/src/Command/Db/CreateDatabaseCommand.php b/module/CLI/src/Command/Db/CreateDatabaseCommand.php index 876128ad..51503ec1 100644 --- a/module/CLI/src/Command/Db/CreateDatabaseCommand.php +++ b/module/CLI/src/Command/Db/CreateDatabaseCommand.php @@ -7,7 +7,10 @@ namespace Shlinkio\Shlink\CLI\Command\Db; use Doctrine\DBAL\Connection; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Shlinkio\Shlink\CLI\Command\Util\CommandUtils; +use Shlinkio\Shlink\CLI\Command\Util\LockConfig; use Shlinkio\Shlink\CLI\Util\ProcessRunnerInterface; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; @@ -18,7 +21,7 @@ use function array_map; use function Shlinkio\Shlink\Core\ArrayUtils\contains; use function Shlinkio\Shlink\Core\ArrayUtils\some; -class CreateDatabaseCommand extends AbstractDatabaseCommand +class CreateDatabaseCommand extends Command { private readonly Connection $regularConn; @@ -27,13 +30,13 @@ class CreateDatabaseCommand extends AbstractDatabaseCommand public const string COMMAND = 'orm:schema-tool:create'; public function __construct( - LockFactory $locker, + private readonly LockFactory $locker, private readonly ProcessRunnerInterface $processRunner, private readonly EntityManagerInterface $em, private readonly Connection $noDbNameConn, ) { $this->regularConn = $this->em->getConnection(); - parent::__construct($locker); + parent::__construct(); } protected function configure(): void @@ -46,10 +49,19 @@ class CreateDatabaseCommand extends AbstractDatabaseCommand ); } - protected function lockedExecute(InputInterface $input, OutputInterface $output): int + protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); + return CommandUtils::executeWithLock( + $this->locker, + LockConfig::blocking(self::NAME), + $io, + fn () => $this->executeCommand($io), + ); + } + private function executeCommand(SymfonyStyle $io): int + { if ($this->databaseTablesExist()) { $io->success('Database already exists. Run "db:migrate" command to make sure it is up to date.'); return self::SUCCESS; @@ -57,7 +69,7 @@ class CreateDatabaseCommand extends AbstractDatabaseCommand // Create database $io->writeln('Creating database tables...'); - $this->processRunner->run($output, [self::SCRIPT, self::COMMAND, '--no-interaction']); + $this->processRunner->run($io, [self::SCRIPT, self::COMMAND, '--no-interaction']); $io->success('Database properly created!'); return self::SUCCESS; diff --git a/module/CLI/src/Command/Db/MigrateDatabaseCommand.php b/module/CLI/src/Command/Db/MigrateDatabaseCommand.php index f4a8c2ac..7dba9ae4 100644 --- a/module/CLI/src/Command/Db/MigrateDatabaseCommand.php +++ b/module/CLI/src/Command/Db/MigrateDatabaseCommand.php @@ -4,23 +4,26 @@ declare(strict_types=1); namespace Shlinkio\Shlink\CLI\Command\Db; +use Shlinkio\Shlink\CLI\Command\Util\CommandUtils; +use Shlinkio\Shlink\CLI\Command\Util\LockConfig; use Shlinkio\Shlink\CLI\Util\ProcessRunnerInterface; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Lock\LockFactory; -class MigrateDatabaseCommand extends AbstractDatabaseCommand +class MigrateDatabaseCommand extends Command { public const string NAME = 'db:migrate'; public const string SCRIPT = 'vendor/doctrine/migrations/bin/doctrine-migrations.php'; public const string COMMAND = 'migrations:migrate'; public function __construct( - LockFactory $locker, + private readonly LockFactory $locker, private readonly ProcessRunnerInterface $processRunner, ) { - parent::__construct($locker); + parent::__construct(); } protected function configure(): void @@ -31,12 +34,21 @@ class MigrateDatabaseCommand extends AbstractDatabaseCommand ->setDescription('Runs database migrations, which will ensure the shlink database is up to date.'); } - protected function lockedExecute(InputInterface $input, OutputInterface $output): int + protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); + return CommandUtils::executeWithLock( + $this->locker, + LockConfig::blocking(self::NAME), + $io, + fn () => $this->executeCommand($io), + ); + } + private function executeCommand(SymfonyStyle $io): int + { $io->writeln('Migrating database...'); - $this->processRunner->run($output, [self::SCRIPT, self::COMMAND, '--no-interaction']); + $this->processRunner->run($io, [self::SCRIPT, self::COMMAND, '--no-interaction']); $io->success('Database properly migrated!'); return self::SUCCESS;