components->info('Starting application installation...'); $migrationExitCode = $this->call( $this->option('fresh') ? 'migrate:fresh' : 'migrate', ['--force' => (bool) $this->option('force')] ); if ($migrationExitCode !== self::SUCCESS) { $this->error('Database migration failed.'); return self::FAILURE; } $rbacExitCode = $this->call('user:manage', [ 'action' => 'init-rbac', ]); if ($rbacExitCode !== self::SUCCESS) { $this->error('Default RBAC initialization failed.'); return self::FAILURE; } $adminEmail = trim((string) $this->option('admin-email')); $adminPhone = trim((string) $this->option('admin-phone')); $adminNickname = trim((string) $this->option('admin-nickname')); $adminPassword = (string) $this->option('admin-password'); if ($adminEmail === '' || $adminNickname === '' || $adminPassword === '') { $this->error('admin-email, admin-nickname and admin-password are required.'); return self::FAILURE; } $adminUser = User::query()->updateOrCreate( ['email' => $adminEmail], [ 'nickname' => $adminNickname, 'phone' => $adminPhone !== '' ? $adminPhone : null, 'password' => $adminPassword, 'force_password_change' => false, ] ); $setAdminExitCode = $this->call('user:manage', [ 'action' => 'set-admin', '--email' => $adminUser->email, ]); if ($setAdminExitCode !== self::SUCCESS) { $this->error('Failed to set admin role and permissions.'); return self::FAILURE; } $this->newLine(); $this->components->info('Application installed successfully.'); $this->line("Admin email: {$adminUser->email}"); if ($adminUser->phone) { $this->line("Admin phone: {$adminUser->phone}"); } $this->line("Admin password: {$adminPassword}"); return self::SUCCESS; } }