first commit

This commit is contained in:
Claudecio Martins
2025-11-04 18:22:02 +01:00
commit c1184d2878
4394 changed files with 444123 additions and 0 deletions

109
zampet-cli Executable file
View File

@@ -0,0 +1,109 @@
#!/usr/bin/env php
<?php
require_once __DIR__ . '/public/index.php';
use Zampet\Services\DB;
$commands = [
'seed' => 'Popular as tabelas com dados iniciais: php zampet-cli seed <versao>',
'migrate' => 'Criar as tabelas no banco de dados: php zampet-cli migrate <versao>',
'construct' => 'Criar as tabelas e popular com dados iniciais: php zampet-cli construct <versao>'
];
if (!$argv[1] || !$argv[2]) {
echo "Uso correto:\n";
foreach ($commands as $cmd => $desc) {
echo " php zampet-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";
}