105 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
 | 
						|
namespace kernel\console\controllers;
 | 
						|
 | 
						|
 | 
						|
use Illuminate\Filesystem\Filesystem;
 | 
						|
use kernel\App;
 | 
						|
use kernel\console\CgMigrationCreator;
 | 
						|
use kernel\console\ConsoleController;
 | 
						|
use Illuminate\Database\Migrations\DatabaseMigrationRepository;
 | 
						|
use Illuminate\Database\Migrations\MigrationCreator;
 | 
						|
use Illuminate\Database\Migrations\Migrator;
 | 
						|
use Illuminate\Database\Schema\Blueprint;
 | 
						|
use Illuminate\Database\Schema\Builder;
 | 
						|
use kernel\services\ModuleService;
 | 
						|
 | 
						|
 | 
						|
class MigrationController extends ConsoleController
 | 
						|
{
 | 
						|
    protected ModuleService $moduleService;
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
        parent::__construct();
 | 
						|
        $this->moduleService = new ModuleService();
 | 
						|
    }
 | 
						|
 | 
						|
    //create migrations table
 | 
						|
    public function actionCreateMigrationTable(): void
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            App::$db->schema->create('migration', function (Blueprint $table) {
 | 
						|
                $table->bigIncrements('id');
 | 
						|
                $table->string('migration', 255);
 | 
						|
                $table->integer('batch');
 | 
						|
            });
 | 
						|
            $this->out->r("Success", 'green');
 | 
						|
        }
 | 
						|
        catch (\Exception $e){
 | 
						|
            $this->out->r($e->getMessage(), 'red');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    // create migrations
 | 
						|
    public function actionCreate(): void
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            if (!isset($this->argv['name'])) {
 | 
						|
                throw new \Exception('Missing migration "--name" specified');
 | 
						|
            }
 | 
						|
            $m = new CgMigrationCreator(new Filesystem(), CgMigrationCreator::getCustomStubPath());
 | 
						|
 | 
						|
            $path = $this->argv['path'] ?? 'migrations';
 | 
						|
 | 
						|
            $res = $m->create(
 | 
						|
                $this->argv['name'],
 | 
						|
                ROOT_DIR . '/' . $path,
 | 
						|
                $this->argv['table'] ?? null,
 | 
						|
                !isset($this->argv['update'])
 | 
						|
            );
 | 
						|
            $this->out->r(basename($res) . " created", 'green');
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            $this->out->r('Message: ' .$e->getMessage(), 'red');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    //execute migrations
 | 
						|
    public function actionRun(): void
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $dmr = new DatabaseMigrationRepository(App::$db->capsule->getDatabaseManager(), 'migration');
 | 
						|
 | 
						|
            $m = new Migrator($dmr, App::$db->capsule->getDatabaseManager(), new Filesystem());
 | 
						|
            $migrationPaths = array_merge($this->moduleService->getModulesMigrationsPaths(), [ROOT_DIR . '/migrations']);
 | 
						|
            //$migrationPaths = [ROOT_DIR . '/migrations'];
 | 
						|
            $res = $m->run($migrationPaths);
 | 
						|
            foreach ($res as $re){
 | 
						|
                $this->out->r(basename($re), 'green');
 | 
						|
            }
 | 
						|
        }
 | 
						|
        catch (\Exception $e){
 | 
						|
            $this->out->r('Message: ' .$e->getMessage(), 'red');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function actionRollback(): void
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $step = $this->argv['step'] ?? 1;
 | 
						|
            $dmr = new DatabaseMigrationRepository(App::$db->capsule->getDatabaseManager(), 'migration');
 | 
						|
 | 
						|
            $m = new Migrator($dmr, App::$db->capsule->getDatabaseManager(), new Filesystem());
 | 
						|
            //$migrationPaths = array_merge(App::$migrationsPaths, [WORKSPACE_DIR . '/console/migrations']);
 | 
						|
            $migrationPaths = [ROOT_DIR . '/migrations'];
 | 
						|
            $res = $m->rollback($migrationPaths, ['step' => $step]);
 | 
						|
            print_r($step);
 | 
						|
            foreach ($res as $re){
 | 
						|
                $this->out->r(basename($re), 'green');
 | 
						|
            }
 | 
						|
        }
 | 
						|
        catch (\Exception $e){
 | 
						|
            $this->out->r('Message: ' .$e->getMessage(), 'red');
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |