| 1: | <?php | 
| 2: |  | 
| 3: | namespace Aurora\System\Console\Commands\Migrations; | 
| 4: |  | 
| 5: | use Aurora\System\Console\Commands\BaseCommand; | 
| 6: | use Illuminate\Database\Console\Migrations\TableGuesser; | 
| 7: | use Illuminate\Database\Migrations\MigrationCreator; | 
| 8: | use Illuminate\Support\Composer; | 
| 9: | use Illuminate\Support\Str; | 
| 10: | use Symfony\Component\Console\Command\Command; | 
| 11: | use Symfony\Component\Console\Input\InputArgument; | 
| 12: | use Symfony\Component\Console\Input\InputInterface; | 
| 13: | use Symfony\Component\Console\Input\InputOption; | 
| 14: | use Symfony\Component\Console\Output\OutputInterface; | 
| 15: |  | 
| 16: | class MigrateMakeCommand extends BaseCommand | 
| 17: | { | 
| 18: |  | 
| 19: |  | 
| 20: |  | 
| 21: |  | 
| 22: |  | 
| 23: | protected $creator; | 
| 24: |  | 
| 25: |  | 
| 26: |  | 
| 27: |  | 
| 28: |  | 
| 29: |  | 
| 30: | protected $composer; | 
| 31: |  | 
| 32: |  | 
| 33: |  | 
| 34: |  | 
| 35: |  | 
| 36: |  | 
| 37: |  | 
| 38: |  | 
| 39: | public function __construct(MigrationCreator $creator, Composer $composer) | 
| 40: | { | 
| 41: | parent::__construct(); | 
| 42: |  | 
| 43: | $this->creator = $creator; | 
| 44: | $this->composer = $composer; | 
| 45: | } | 
| 46: |  | 
| 47: | protected function configure(): void | 
| 48: | { | 
| 49: | $this->setName('make:migration') | 
| 50: | ->setDescription('Create the migration repository') | 
| 51: | ->addArgument('name', InputArgument::REQUIRED, 'The name of the migration') | 
| 52: | ->addArgument('module', InputArgument::REQUIRED, 'The module for the migration') | 
| 53: | ->addOption('create', null, InputOption::VALUE_OPTIONAL, 'The table to be created') | 
| 54: | ->addOption('table', null, InputOption::VALUE_OPTIONAL, 'The table to migrate') | 
| 55: | ->addOption('path', null, InputOption::VALUE_OPTIONAL, 'The location where the migration file should be created') | 
| 56: | ->addOption('realpath', null, InputOption::VALUE_OPTIONAL, 'Indicate any provided migration file paths are pre-resolved absolute paths') | 
| 57: | ->addOption('fullpath', null, InputOption::VALUE_OPTIONAL, 'Output the full path of the migration'); | 
| 58: | } | 
| 59: |  | 
| 60: |  | 
| 61: |  | 
| 62: |  | 
| 63: |  | 
| 64: |  | 
| 65: | protected function execute(InputInterface $input, OutputInterface $output): int | 
| 66: | { | 
| 67: |  | 
| 68: |  | 
| 69: |  | 
| 70: | $name = Str::snake(trim($input->getArgument('name'))); | 
| 71: |  | 
| 72: | $table = $input->getOption('table'); | 
| 73: |  | 
| 74: | $create = $input->getOption('create') ?: false; | 
| 75: |  | 
| 76: |  | 
| 77: |  | 
| 78: |  | 
| 79: | if (!$table && is_string($create)) { | 
| 80: | $table = $create; | 
| 81: |  | 
| 82: | $create = true; | 
| 83: | } | 
| 84: |  | 
| 85: |  | 
| 86: |  | 
| 87: |  | 
| 88: | if (!$table) { | 
| 89: | [$table, $create] = TableGuesser::guess($name); | 
| 90: | } | 
| 91: |  | 
| 92: |  | 
| 93: |  | 
| 94: |  | 
| 95: | $this->writeMigration($name, $table, $create, $input, $output); | 
| 96: |  | 
| 97: | $this->composer->dumpAutoloads(); | 
| 98: |  | 
| 99: | return Command::SUCCESS; | 
| 100: | } | 
| 101: |  | 
| 102: |  | 
| 103: |  | 
| 104: |  | 
| 105: |  | 
| 106: |  | 
| 107: |  | 
| 108: |  | 
| 109: |  | 
| 110: | protected function writeMigration($name, $table, $create, $input, $output) | 
| 111: | { | 
| 112: | $file = $this->creator->create( | 
| 113: | $name, | 
| 114: | $this->getMigrationPath($input->getArgument('module')), | 
| 115: | $table, | 
| 116: | $create | 
| 117: | ); | 
| 118: |  | 
| 119: | if (!$input->getOption('fullpath')) { | 
| 120: | $file = pathinfo($file, PATHINFO_FILENAME); | 
| 121: | } | 
| 122: |  | 
| 123: | $output->writeln("<info>Created Migration:</info> {$file}"); | 
| 124: | } | 
| 125: | } | 
| 126: |  |