104 lines
3.8 KiB
PHP
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";
|