From a6e331390a04aec1f35782cf9fa97a52301b6136 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 2 Jul 2021 11:03:01 +0200 Subject: [PATCH 1/5] feat(migration): add version chooser --- app/tasks/migrate.php | 23 +++++++++++++++++++---- src/Appwrite/Migration/Version/V04.php | 14 -------------- 2 files changed, 19 insertions(+), 18 deletions(-) delete mode 100644 src/Appwrite/Migration/Version/V04.php diff --git a/app/tasks/migrate.php b/app/tasks/migrate.php index dad0847e97..5bd44615ef 100644 --- a/app/tasks/migrate.php +++ b/app/tasks/migrate.php @@ -8,12 +8,26 @@ use Appwrite\Database\Database; use Appwrite\Database\Validator\Authorization; use Appwrite\Database\Adapter\MySQL as MySQLAdapter; use Appwrite\Database\Adapter\Redis as RedisAdapter; -use Appwrite\Migration\Version; +use Utopia\Validator\Text; $cli ->task('migrate') - ->action(function () use ($register) { - Console::success('Starting Data Migration'); + ->param('version', APP_VERSION_STABLE, new Text(8), 'Version to migrate to.', true) + ->action(function ($version) use ($register) { + $versions = [ + '0.6.0' => 'V05', + '0.7.0' => 'V06', + '0.8.0' => 'V07', + '0.9.0' => 'V08', + ]; + + if (!array_key_exists($version, $versions)) { + Console::error("Version {$version} not found."); + Console::exit(1); + return; + } + + Console::success('Starting Data Migration to version '.$version); $db = $register->get('db', true); $cache = $register->get('cache', true); @@ -38,7 +52,8 @@ $cli $projects = [$console]; $count = 0; - $migration = new Version\V08($register->get('db')); //TODO: remove hardcoded version and move to dynamic migration + $class = "Appwrite\\Migration\\Version\\$versions[$version]"; + $migration = new $class($register->get('db')); while ($sum > 0) { foreach ($projects as $project) { diff --git a/src/Appwrite/Migration/Version/V04.php b/src/Appwrite/Migration/Version/V04.php deleted file mode 100644 index 3b13d8920b..0000000000 --- a/src/Appwrite/Migration/Version/V04.php +++ /dev/null @@ -1,14 +0,0 @@ - Date: Fri, 2 Jul 2021 11:09:02 +0200 Subject: [PATCH 2/5] move versions list to migration class --- app/tasks/migrate.php | 12 ++++-------- src/Appwrite/Migration/Migration.php | 10 ++++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/tasks/migrate.php b/app/tasks/migrate.php index 5bd44615ef..e6703d9253 100644 --- a/app/tasks/migrate.php +++ b/app/tasks/migrate.php @@ -8,20 +8,16 @@ use Appwrite\Database\Database; use Appwrite\Database\Validator\Authorization; use Appwrite\Database\Adapter\MySQL as MySQLAdapter; use Appwrite\Database\Adapter\Redis as RedisAdapter; +use Appwrite\Migration\Migration; use Utopia\Validator\Text; $cli ->task('migrate') ->param('version', APP_VERSION_STABLE, new Text(8), 'Version to migrate to.', true) ->action(function ($version) use ($register) { - $versions = [ - '0.6.0' => 'V05', - '0.7.0' => 'V06', - '0.8.0' => 'V07', - '0.9.0' => 'V08', - ]; + - if (!array_key_exists($version, $versions)) { + if (!array_key_exists($version, Migration::$versions)) { Console::error("Version {$version} not found."); Console::exit(1); return; @@ -52,7 +48,7 @@ $cli $projects = [$console]; $count = 0; - $class = "Appwrite\\Migration\\Version\\$versions[$version]"; + $class = 'Appwrite\\Migration\\Version\\'.Migration::$versions[$version]; $migration = new $class($register->get('db')); while ($sum > 0) { diff --git a/src/Appwrite/Migration/Migration.php b/src/Appwrite/Migration/Migration.php index ed18bf85ee..0d6995b064 100644 --- a/src/Appwrite/Migration/Migration.php +++ b/src/Appwrite/Migration/Migration.php @@ -31,6 +31,16 @@ abstract class Migration */ protected $projectDB; + /** + * @var array + */ + public static array $versions = [ + '0.6.0' => 'V05', + '0.7.0' => 'V06', + '0.8.0' => 'V07', + '0.9.0' => 'V08', + ]; + /** * Migration constructor. * From b4dd30dfbac816dd79cf2ab4e6cb1231f020891a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 2 Jul 2021 11:10:46 +0200 Subject: [PATCH 3/5] fix whitespace --- app/tasks/migrate.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/tasks/migrate.php b/app/tasks/migrate.php index e6703d9253..60aad941d1 100644 --- a/app/tasks/migrate.php +++ b/app/tasks/migrate.php @@ -15,8 +15,6 @@ $cli ->task('migrate') ->param('version', APP_VERSION_STABLE, new Text(8), 'Version to migrate to.', true) ->action(function ($version) use ($register) { - - if (!array_key_exists($version, Migration::$versions)) { Console::error("Version {$version} not found."); Console::exit(1); From 8966d3d67379977b68be15e9020bc403dd1d2266 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 2 Jul 2021 11:33:10 +0200 Subject: [PATCH 4/5] add tests --- tests/unit/Migration/MigrationTest.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/unit/Migration/MigrationTest.php b/tests/unit/Migration/MigrationTest.php index 5a85ee23a2..076d2bbf4c 100644 --- a/tests/unit/Migration/MigrationTest.php +++ b/tests/unit/Migration/MigrationTest.php @@ -4,8 +4,11 @@ namespace Appwrite\Tests; use Appwrite\Database\Document; use Appwrite\Migration\Migration; +use PHPUnit\Framework\ExpectationFailedException; +use PHPUnit\Framework\Exception; use PHPUnit\Framework\TestCase; use ReflectionMethod; +use SebastianBergmann\RecursionContext\InvalidArgumentException; abstract class MigrationTest extends TestCase { @@ -36,4 +39,17 @@ abstract class MigrationTest extends TestCase ]); } + /** + * Check versions array integrity. + */ + public function testMigrationVersions() + { + require_once __DIR__.'/../../../app/init.php'; + + foreach (Migration::$versions as $version => $class) { + $this->assertTrue(class_exists('Appwrite\\Migration\\Version\\'.$class)); + } + // Test if current version exists + $this->assertArrayHasKey(APP_VERSION_STABLE, Migration::$versions); + } } From cec23ecd7e0c7804263f5245d5dd3de348c1e42c Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 2 Jul 2021 13:32:57 +0200 Subject: [PATCH 5/5] remove leftover imports --- tests/unit/Migration/MigrationTest.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/unit/Migration/MigrationTest.php b/tests/unit/Migration/MigrationTest.php index 076d2bbf4c..45ddcca29f 100644 --- a/tests/unit/Migration/MigrationTest.php +++ b/tests/unit/Migration/MigrationTest.php @@ -4,11 +4,8 @@ namespace Appwrite\Tests; use Appwrite\Database\Document; use Appwrite\Migration\Migration; -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\Exception; use PHPUnit\Framework\TestCase; use ReflectionMethod; -use SebastianBergmann\RecursionContext\InvalidArgumentException; abstract class MigrationTest extends TestCase {