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);
 | |
| }
 |