first commit
This commit is contained in:
108
workbloom-cli
Normal file
108
workbloom-cli
Normal file
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
require_once __DIR__ . '/public/index.php';
|
||||
|
||||
use Workbloom\Services\DB;
|
||||
|
||||
$commands = [
|
||||
'seed' => 'Popular as tabelas com dados iniciais: php workbloom-cli seed <versao>',
|
||||
'migrate' => 'Criar as tabelas no banco de dados: php workbloom-cli migrate <versao>',
|
||||
'construct' => 'Criar as tabelas e popular com dados iniciais: php workbloom-cli construct <versao>'
|
||||
];
|
||||
|
||||
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";
|
||||
}
|
||||
Reference in New Issue
Block a user