From 8fd0a8e2ffb2e4b086c6c7a44ca756f5f41ad732 Mon Sep 17 00:00:00 2001 From: Doge Date: Tue, 17 Oct 2023 20:45:28 +0300 Subject: [PATCH] refactor(Migration): clean up code --- .../BedrockEconomy/BedrockEconomy.php | 4 +++- .../{IMigration.php => BaseMigration.php} | 20 ++++++++++++++----- .../database/migration/MigrationRegistry.php | 19 ++++++++++-------- .../migration/economyapi/Migration.php | 18 ++++++++--------- .../database/migration/v2_1_2/Migration.php | 18 ++++++++--------- 5 files changed, 47 insertions(+), 32 deletions(-) rename src/cooldogedev/BedrockEconomy/database/migration/{IMigration.php => BaseMigration.php} (69%) diff --git a/src/cooldogedev/BedrockEconomy/BedrockEconomy.php b/src/cooldogedev/BedrockEconomy/BedrockEconomy.php index 3006418..743c646 100644 --- a/src/cooldogedev/BedrockEconomy/BedrockEconomy.php +++ b/src/cooldogedev/BedrockEconomy/BedrockEconomy.php @@ -137,7 +137,9 @@ protected function onEnable(): void function (): void { [$oldVersion, $oldProvider] = $this->migrationInfo; - foreach (MigrationRegistry::get($oldVersion) as $migration) { + foreach (MigrationRegistry::get($oldVersion) as $migrationClass) { + $migration = new $migrationClass($this); + if ($migration->run($oldProvider)) { $this->getLogger()->debug($migration->getName() . " migration ran successfully"); } else { diff --git a/src/cooldogedev/BedrockEconomy/database/migration/IMigration.php b/src/cooldogedev/BedrockEconomy/database/migration/BaseMigration.php similarity index 69% rename from src/cooldogedev/BedrockEconomy/database/migration/IMigration.php rename to src/cooldogedev/BedrockEconomy/database/migration/BaseMigration.php index bb55339..c54d75f 100644 --- a/src/cooldogedev/BedrockEconomy/database/migration/IMigration.php +++ b/src/cooldogedev/BedrockEconomy/database/migration/BaseMigration.php @@ -30,11 +30,21 @@ namespace cooldogedev\BedrockEconomy\database\migration; -interface IMigration +use cooldogedev\BedrockEconomy\BedrockEconomy; +use PrefixedLogger; + +abstract class BaseMigration { - public function getName(): string; - public function getMin(): string; - public function getMax(): string; + protected readonly PrefixedLogger $logger; + + final public function __construct(protected readonly BedrockEconomy $plugin) + { + $this->logger = new PrefixedLogger($this->plugin->getLogger(), "Migration:" . $this->getName()); + } + + abstract static public function getName(): string; + abstract static public function getMin(): string; + abstract static public function getMax(): string; - public function run(string $mode): bool; + abstract public function run(string $mode): bool; } diff --git a/src/cooldogedev/BedrockEconomy/database/migration/MigrationRegistry.php b/src/cooldogedev/BedrockEconomy/database/migration/MigrationRegistry.php index a76bb87..1e4185d 100644 --- a/src/cooldogedev/BedrockEconomy/database/migration/MigrationRegistry.php +++ b/src/cooldogedev/BedrockEconomy/database/migration/MigrationRegistry.php @@ -36,24 +36,27 @@ final class MigrationRegistry { - /** - * @var array - */ protected static array $migrations = []; public static function init(): void { - MigrationRegistry::register(new EconomyAPI()); - MigrationRegistry::register(new v2_1_2()); + MigrationRegistry::register(EconomyAPI::class); + MigrationRegistry::register(v2_1_2::class); } + /** + * @return array> + */ public static function get(string $version): array { $migrations = []; + /** + * @var class-string $migration + */ foreach (MigrationRegistry::$migrations as $migration) { - $min = $migration->getMin(); - $max = $migration->getMax(); + $min = $migration::getMin(); + $max = $migration::getMax(); if ($min !== MigrationVersion::VERSION_ANY && !version_compare($version, $min, ">=")) { continue; @@ -69,7 +72,7 @@ public static function get(string $version): array return $migrations; } - protected static function register(IMigration $migration): void + protected static function register(string $migration): void { MigrationRegistry::$migrations[] = $migration; } diff --git a/src/cooldogedev/BedrockEconomy/database/migration/economyapi/Migration.php b/src/cooldogedev/BedrockEconomy/database/migration/economyapi/Migration.php index ac00920..28380d4 100644 --- a/src/cooldogedev/BedrockEconomy/database/migration/economyapi/Migration.php +++ b/src/cooldogedev/BedrockEconomy/database/migration/economyapi/Migration.php @@ -31,34 +31,33 @@ namespace cooldogedev\BedrockEconomy\database\migration\economyapi; use cooldogedev\BedrockEconomy\api\BedrockEconomyAPI; -use cooldogedev\BedrockEconomy\BedrockEconomy; use cooldogedev\BedrockEconomy\database\constant\MigrationVersion; use cooldogedev\BedrockEconomy\database\exception\RecordAlreadyExistsException; -use cooldogedev\BedrockEconomy\database\migration\IMigration; +use cooldogedev\BedrockEconomy\database\migration\BaseMigration; use cooldogedev\libSQL\exception\SQLException; use Generator; use SOFe\AwaitGenerator\Await; -final class Migration implements IMigration +final class Migration extends BaseMigration { - public function getName(): string + public static function getName(): string { return "EconomyAPI"; } - public function getMin(): string + public static function getMin(): string { return MigrationVersion::VERSION_ANY; } - public function getMax(): string + public static function getMax(): string { return MigrationVersion::VERSION_ANY; } public function run(string $mode): bool { - $economyAPI = BedrockEconomy::getInstance()->getServer()->getPluginManager()->getPlugin("EconomyAPI"); + $economyAPI = $this->plugin->getServer()->getPluginManager()->getPlugin("EconomyAPI"); if ($economyAPI === null) { return false; @@ -73,10 +72,11 @@ function () use ($economyAPI): Generator { try { yield from BedrockEconomyAPI::ASYNC()->insert($username, $username, $amount, $decimals); + $this->logger->info("Migrated data for player " . $username); } catch (RecordAlreadyExistsException) { - BedrockEconomy::getInstance()->getLogger()->warning("Attempted to migrate data for player " . $username . " but they already exist. (" . $this->getName() . ")"); + $this->logger->warning("Attempted to migrate data for player " . $username . " but they already exist"); } catch (SQLException) { - BedrockEconomy::getInstance()->getLogger()->warning("Failed to migrate data for player " . $username . ". (" . $this->getName() . ")"); + $this->logger->warning("Failed to migrate data for player " . $username); } } } diff --git a/src/cooldogedev/BedrockEconomy/database/migration/v2_1_2/Migration.php b/src/cooldogedev/BedrockEconomy/database/migration/v2_1_2/Migration.php index 733621c..a9e8f3a 100644 --- a/src/cooldogedev/BedrockEconomy/database/migration/v2_1_2/Migration.php +++ b/src/cooldogedev/BedrockEconomy/database/migration/v2_1_2/Migration.php @@ -31,26 +31,25 @@ namespace cooldogedev\BedrockEconomy\database\migration\v2_1_2; use cooldogedev\BedrockEconomy\api\BedrockEconomyAPI; -use cooldogedev\BedrockEconomy\BedrockEconomy; use cooldogedev\BedrockEconomy\database\exception\RecordAlreadyExistsException; -use cooldogedev\BedrockEconomy\database\migration\IMigration; +use cooldogedev\BedrockEconomy\database\migration\BaseMigration; use cooldogedev\libSQL\exception\SQLException; use Generator; use SOFe\AwaitGenerator\Await; -final class Migration implements IMigration +final class Migration extends BaseMigration { - public function getName(): string + public static function getName(): string { return "<=2.1.2"; } - public function getMin(): string + public static function getMin(): string { return "0.0.1"; } - public function getMax(): string + public static function getMax(): string { return "2.1.2"; } @@ -64,16 +63,17 @@ function () use ($records): Generator { foreach ($records as $record) { try { yield from BedrockEconomyAPI::ASYNC()->insert($record["username"], $record["username"], (int)$record["balance"], 0); + $this->logger->info("Migrated data for player " . $record["username"]); } catch (RecordAlreadyExistsException) { - BedrockEconomy::getInstance()->getLogger()->warning("Attempted to migrate data for player " . $record["username"] . " but they already exist. (" . $this->getName() . ")"); + $this->logger->warning("Attempted to migrate data for player " . $record["username"] . " but they already exist"); } catch (SQLException) { - BedrockEconomy::getInstance()->getLogger()->warning("Failed to migrate data for player " . $record["username"] . ". (" . $this->getName() . ")"); + $this->logger->warning("Failed to migrate data for player " . $record["username"]); } } } ), onFail: function (): void { - BedrockEconomy::getInstance()->getLogger()->warning("Failed to migrate data from old database. (" . $this->getName() . ")"); + $this->logger->warning("Failed to migrate data from old database"); } );