#!/usr/bin/env php 'Popular as tabelas com dados iniciais: php workbloom-cli seed ', 'migrate' => 'Criar as tabelas no banco de dados: php workbloom-cli migrate ', 'construct' => 'Criar as tabelas e popular com dados iniciais: php workbloom-cli construct ' ]; if (!$argv[1] || !$argv[2]) { echo "Uso correto:\n"; foreach ($commands as $cmd => $desc) { echo " php fleetrix-cli $desc\n"; } exit(1); } // monta o nome da função dinamicamente $functionName = $argv[1]. ucfirst(string: $argv[2]); // verifica se a função existe if (!function_exists(function: $functionName)) { echo "Função '{$argv[2]}' não encontrada.\n"; exit(1); } // Pega todos os argumentos que vêm depois do nome da função $args = array_slice(array: $argv, offset: 3); // do índice 3 em diante // chama a função call_user_func_array(callback: $functionName, args: $args); // ============================= // Funções do Tipo Common // ============================= function commonMigrate(string $version) { $dir = realpath(path: __DIR__ . "/database/{$version}/migrations"); if (!is_dir(filename: $dir)) { echo "Versão de migration '{$version}' não encontrada.\n"; exit(1); } foreach (scandir(directory: $dir) as $file) { if (pathinfo(path: $file, flags: PATHINFO_EXTENSION) === 'sql') { echo "Executando migration: {$file}...\n"; $sql = file_get_contents(filename: $dir . '/' . $file); // Remove comentários e quebra por ";" $sql = preg_replace(pattern: '/--.*[\r\n]/', replacement: '', subject: $sql); $statements = array_filter(array: array_map(callback: 'trim', array: explode(separator: ';', string: $sql))); DB::beginTransaction(); try { foreach ($statements as $statement) { if ($statement !== '') { DB::execute(sql: $statement); } } DB::commit(); } catch (Exception $e) { DB::rollBack(); echo "Erro na migration {$file}: {$e->getMessage()}\n"; exit(1); } } } echo "Migrations solicitadas foram concluídas com sucesso.\n"; } function commonSeed(string $version) { $seedFiles = glob(pattern: __DIR__ . "/database/{$version}/seeds/*.sql"); if (!$seedFiles) { echo "Nenhuma seed encontrada para a versão {$version}.\n"; return; } // Ordena os arquivos usort(array: $seedFiles, callback: fn($a, $b) => strcmp(string1: basename(path: $a), string2: basename(path: $b))); foreach ($seedFiles as $file) { echo "Executando seed: " . basename(path: $file) . "...\n"; $sql = file_get_contents(filename: $file); // Remove comentários e quebra por ";" $sql = preg_replace(pattern: '/--.*[\r\n]/', replacement: '', subject: $sql); $statements = array_filter(array: array_map(callback: 'trim', array: explode(separator: ';', string: $sql))); DB::beginTransaction(); try { foreach ($statements as $statement) { if ($statement !== '') { DB::execute(sql: $statement); } } } catch (Exception $e) { DB::rollBack(); echo "Erro na seed " . basename(path: $file) . ": " . $e->getMessage() . "\n"; exit(1); } } DB::commit(); echo "Seeds solicitadas foram concluídas com sucesso.\n"; }