Files
whatsapp/migrate_edit_delete.php
2026-02-03 21:30:55 -05:00

104 lines
3.8 KiB
PHP

<?php
/**
* Migración - Agregar columnas para edición y eliminación de mensajes
* Fecha: 28 de enero de 2026
*/
require_once 'config/config.php';
echo "<h2>Migración: Columnas para editar/eliminar mensajes</h2>\n";
echo "<pre>\n";
try {
$db = Database::getInstance();
// Verificar si las columnas ya existen
$columns = [];
$result = $db->fetchAll("SHOW COLUMNS FROM conversations");
foreach ($result as $row) {
$columns[] = $row['Field'];
}
$migrationsNeeded = [];
// Columna edited_at
if (!in_array('edited_at', $columns)) {
$migrationsNeeded[] = [
'column' => 'edited_at',
'sql' => "ALTER TABLE conversations ADD COLUMN edited_at DATETIME NULL DEFAULT NULL COMMENT 'Fecha de última edición'"
];
} else {
echo "✅ Columna 'edited_at' ya existe\n";
}
// Columna deleted_at (para soft delete)
if (!in_array('deleted_at', $columns)) {
$migrationsNeeded[] = [
'column' => 'deleted_at',
'sql' => "ALTER TABLE conversations ADD COLUMN deleted_at DATETIME NULL DEFAULT NULL COMMENT 'Fecha de eliminación (soft delete)'"
];
} else {
echo "✅ Columna 'deleted_at' ya existe\n";
}
// Columna original_content (para guardar contenido original antes de eliminar)
if (!in_array('original_content', $columns)) {
$migrationsNeeded[] = [
'column' => 'original_content',
'sql' => "ALTER TABLE conversations ADD COLUMN original_content TEXT NULL DEFAULT NULL COMMENT 'Contenido original (antes de eliminar)'"
];
} else {
echo "✅ Columna 'original_content' ya existe\n";
}
// Ejecutar migraciones pendientes
if (count($migrationsNeeded) > 0) {
echo "\n📦 Ejecutando " . count($migrationsNeeded) . " migración(es)...\n\n";
foreach ($migrationsNeeded as $migration) {
echo "➡️ Agregando columna '{$migration['column']}'...\n";
try {
$db->execute($migration['sql']);
echo " ✅ Columna '{$migration['column']}' agregada correctamente\n";
} catch (Exception $e) {
echo " ❌ Error: " . $e->getMessage() . "\n";
}
}
// Agregar índice para optimizar búsquedas de mensajes no eliminados
echo "\n➡️ Verificando índices...\n";
try {
$indexes = $db->fetchAll("SHOW INDEX FROM conversations WHERE Key_name = 'idx_deleted_at'");
if (empty($indexes)) {
$db->execute("ALTER TABLE conversations ADD INDEX idx_deleted_at (deleted_at)");
echo " ✅ Índice 'idx_deleted_at' creado\n";
} else {
echo " ✅ Índice 'idx_deleted_at' ya existe\n";
}
} catch (Exception $e) {
echo " ⚠️ Índice no pudo crearse: " . $e->getMessage() . "\n";
}
echo "\n✅ Migración completada!\n";
} else {
echo "\n✅ No hay migraciones pendientes. La base de datos está actualizada.\n";
}
// Mostrar estructura actual de la tabla
echo "\n📋 Estructura actual de la tabla 'conversations':\n";
echo str_repeat('-', 60) . "\n";
$result = $db->fetchAll("SHOW COLUMNS FROM conversations");
foreach ($result as $row) {
$null = $row['Null'] === 'YES' ? 'NULL' : 'NOT NULL';
$default = $row['Default'] !== null ? "DEFAULT '{$row['Default']}'" : '';
echo sprintf(" %-25s %-20s %s %s\n", $row['Field'], $row['Type'], $null, $default);
}
} catch (Exception $e) {
echo "❌ Error fatal: " . $e->getMessage() . "\n";
echo "Stack trace: " . $e->getTraceAsString() . "\n";
}
echo "</pre>\n";
echo "<p><a href='conversations.php'>← Volver a conversaciones</a></p>\n";