75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
|  | #!/usr/bin/env php
 | ||
|  | <?php | ||
|  | 
 | ||
|  | // Simple CLI to run DB migrations
 | ||
|  | 
 | ||
|  | require_once __DIR__ . '/../app/core/ConfigLoader.php'; | ||
|  | require_once __DIR__ . '/../app/core/DatabaseConnector.php'; | ||
|  | require_once __DIR__ . '/../app/core/MigrationRunner.php'; | ||
|  | 
 | ||
|  | use App\Core\ConfigLoader; | ||
|  | use App\Core\DatabaseConnector; | ||
|  | use App\Core\MigrationRunner; | ||
|  | 
 | ||
|  | function printUsage() | ||
|  | { | ||
|  |     echo "\nJilo Web - Database Migrations\n"; | ||
|  |     echo "Usage:\n"; | ||
|  |     echo "  php scripts/migrate.php status     # Show pending and applied migrations\n"; | ||
|  |     echo "  php scripts/migrate.php up         # Apply all pending migrations\n"; | ||
|  |     echo "\n"; | ||
|  | } | ||
|  | 
 | ||
|  | $action = $argv[1] ?? 'status'; | ||
|  | 
 | ||
|  | try { | ||
|  |     // Load configuration to connect to DB
 | ||
|  |     $config = ConfigLoader::loadConfig([ | ||
|  |         __DIR__ . '/../app/config/jilo-web.conf.php', | ||
|  |         __DIR__ . '/../jilo-web.conf.php', | ||
|  |         '/srv/jilo-web/jilo-web.conf.php', | ||
|  |         '/opt/jilo-web/jilo-web.conf.php', | ||
|  |     ]); | ||
|  | 
 | ||
|  |     $db = DatabaseConnector::connect($config); | ||
|  |     $migrationsDir = realpath(__DIR__ . '/../doc/database/migrations'); | ||
|  |     if ($migrationsDir === false) { | ||
|  |         fwrite(STDERR, "Migrations directory not found: doc/database/migrations\n"); | ||
|  |         exit(1); | ||
|  |     } | ||
|  | 
 | ||
|  |     $runner = new MigrationRunner($db, $migrationsDir); | ||
|  | 
 | ||
|  |     if ($action === 'status') { | ||
|  |         $all = $runner->listAllMigrations(); | ||
|  |         $applied = $runner->listAppliedMigrations(); | ||
|  |         $pending = $runner->listPendingMigrations(); | ||
|  | 
 | ||
|  |         echo "All migrations (" . count($all) . "):\n"; | ||
|  |         foreach ($all as $m) echo "  - $m\n"; | ||
|  |         echo "\nApplied (" . count($applied) . "):\n"; | ||
|  |         foreach ($applied as $m) echo "  - $m\n"; | ||
|  |         echo "\nPending (" . count($pending) . "):\n"; | ||
|  |         foreach ($pending as $m) echo "  - $m\n"; | ||
|  |         echo "\n"; | ||
|  |         exit(0); | ||
|  |     } elseif ($action === 'up') { | ||
|  |         $pending = $runner->listPendingMigrations(); | ||
|  |         if (empty($pending)) { | ||
|  |             echo "No pending migrations.\n"; | ||
|  |             exit(0); | ||
|  |         } | ||
|  |         echo "Applying " . count($pending) . " migration(s):\n"; | ||
|  |         foreach ($pending as $m) echo "  - $m\n"; | ||
|  |         $applied = $runner->applyPendingMigrations(); | ||
|  |         echo "\nApplied successfully: " . count($applied) . "\n"; | ||
|  |         exit(0); | ||
|  |     } else { | ||
|  |         printUsage(); | ||
|  |         exit(1); | ||
|  |     } | ||
|  | } catch (Throwable $e) { | ||
|  |     fwrite(STDERR, "Migration error: " . $e->getMessage() . "\n"); | ||
|  |     exit(1); | ||
|  | } |