up
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
/**
|
||||
* Migración: Módulo Administrativo de Laboratorio
|
||||
* Ejecuta las 7 migraciones SQL del módulo en orden
|
||||
*
|
||||
* Uso:
|
||||
* php migrations/20260302_lab_run_migrations.php
|
||||
* php migrations/20260302_lab_run_migrations.php --rollback
|
||||
*
|
||||
* Las tablas se crean en este orden para respetar las FK:
|
||||
* 1. lab_pacientes (depende de users)
|
||||
* 2. lab_enfermeras (independiente)
|
||||
* 3. lab_ordenes_medicas (depende de lab_pacientes, conversations, admin_users)
|
||||
* 4. lab_domicilios (depende de lab_ordenes_medicas, lab_pacientes)
|
||||
* 5. lab_asignaciones (depende de lab_domicilios, lab_enfermeras)
|
||||
* 6. lab_autorizaciones (depende de lab_ordenes_medicas)
|
||||
* 7. lab_actividad_admin (depende de admin_users)
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/../config/config.php';
|
||||
|
||||
$isRollback = in_array('--rollback', $argv ?? []);
|
||||
$line = str_repeat('─', 60);
|
||||
|
||||
echo "\n$line\n";
|
||||
echo $isRollback
|
||||
? " 🔄 ROLLBACK — Módulo Administrativo Lab\n"
|
||||
: " 🚀 MIGRACIÓN — Módulo Administrativo Lab\n";
|
||||
echo "$line\n\n";
|
||||
|
||||
// ── Archivos en orden de ejecución (rollback = inverso) ──────────────────────
|
||||
$migrations = [
|
||||
'20260302_lab_01_pacientes.sql',
|
||||
'20260302_lab_02_enfermeras.sql',
|
||||
'20260302_lab_03_ordenes_medicas.sql',
|
||||
'20260302_lab_04_domicilios.sql',
|
||||
'20260302_lab_05_asignaciones.sql',
|
||||
'20260302_lab_06_autorizaciones.sql',
|
||||
'20260302_lab_07_actividad_admin.sql',
|
||||
];
|
||||
|
||||
// ── Sentencias DROP para rollback (orden inverso para respetar FK) ───────────
|
||||
$rollback = [
|
||||
'DROP TABLE IF EXISTS `lab_actividad_admin`',
|
||||
'DROP TABLE IF EXISTS `lab_autorizaciones`',
|
||||
'DROP TABLE IF EXISTS `lab_asignaciones`',
|
||||
'DROP TABLE IF EXISTS `lab_domicilios`',
|
||||
'DROP TABLE IF EXISTS `lab_ordenes_medicas`',
|
||||
'DROP TABLE IF EXISTS `lab_enfermeras`',
|
||||
'DROP TABLE IF EXISTS `lab_pacientes`',
|
||||
];
|
||||
|
||||
try {
|
||||
$db = Database::getInstance();
|
||||
$pdo = $db->getConnection();
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
if ($isRollback) {
|
||||
// ── ROLLBACK ─────────────────────────────────────────────────────────
|
||||
foreach ($rollback as $sql) {
|
||||
$table = preg_replace('/.*`(lab_\w+)`.*/', '$1', $sql);
|
||||
$pdo->exec($sql);
|
||||
echo " ✅ DROP $table\n";
|
||||
}
|
||||
echo "\n ✔ Rollback completado correctamente.\n\n";
|
||||
} else {
|
||||
// ── MIGRACIÓN ────────────────────────────────────────────────────────
|
||||
$dir = __DIR__;
|
||||
|
||||
foreach ($migrations as $file) {
|
||||
$path = "$dir/$file";
|
||||
|
||||
if (!file_exists($path)) {
|
||||
echo " ⚠️ Archivo no encontrado: $file (omitido)\n";
|
||||
continue;
|
||||
}
|
||||
|
||||
$sql = file_get_contents($path);
|
||||
|
||||
// Separar sentencias por ';' pero solo las CREATE TABLE
|
||||
// (Los archivos contienen una sola sentencia CREATE TABLE)
|
||||
$pdo->exec($sql);
|
||||
|
||||
// Extraer nombre de tabla del archivo para feedback
|
||||
preg_match('/CREATE TABLE IF NOT EXISTS `(\w+)`/i', $sql, $m);
|
||||
$table = $m[1] ?? $file;
|
||||
echo " ✅ $table\n";
|
||||
}
|
||||
|
||||
echo "\n$line\n";
|
||||
echo " ✔ Todas las migraciones ejecutadas correctamente.\n";
|
||||
echo "$line\n\n";
|
||||
|
||||
// ── Tabla de control de migraciones ejecutadas en system_logs ────────
|
||||
try {
|
||||
$pdo->prepare("
|
||||
INSERT INTO system_logs (level, message, context, created_at)
|
||||
VALUES ('info', 'lab_module_migration', ?, NOW())
|
||||
")->execute([json_encode([
|
||||
'version' => '20260302',
|
||||
'module' => 'lab_admin',
|
||||
'tables' => 7,
|
||||
'executed' => date('Y-m-d H:i:s'),
|
||||
])]);
|
||||
} catch (Exception $e) {
|
||||
// system_logs puede no tener estas columnas — no falla la migración
|
||||
}
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
echo "\n ❌ ERROR: " . $e->getMessage() . "\n\n";
|
||||
echo " Ejecuta --rollback para deshacer los cambios parciales.\n\n";
|
||||
exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user