66 lines
3.0 KiB
PHP
66 lines
3.0 KiB
PHP
<?php
|
|
/**
|
|
* Migración: Crear tabla file_requests para solicitudes de archivos grandes
|
|
*
|
|
* Esta tabla almacena las solicitudes de carga de archivos grandes que se
|
|
* envían a los clientes por WhatsApp. Cada solicitud genera un token único
|
|
* que se usa como enlace público de carga.
|
|
*/
|
|
|
|
require_once __DIR__ . '/../config/config.php';
|
|
|
|
try {
|
|
$db = Database::getInstance();
|
|
$pdo = $db->getConnection();
|
|
|
|
// Tabla principal: solicitudes de carga de archivos
|
|
$pdo->exec("
|
|
CREATE TABLE IF NOT EXISTS file_requests (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
token VARCHAR(64) NOT NULL UNIQUE COMMENT 'Token único para el enlace público',
|
|
user_id INT NOT NULL COMMENT 'FK a users.id (contacto de WhatsApp)',
|
|
phone_number VARCHAR(20) NOT NULL COMMENT 'Teléfono del cliente',
|
|
requested_by INT DEFAULT NULL COMMENT 'FK a admin_users.id (operador que solicitó)',
|
|
status ENUM('pending','uploaded','expired','cancelled') DEFAULT 'pending',
|
|
max_file_size BIGINT DEFAULT 52428800 COMMENT 'Tamaño máximo en bytes (default 50MB)',
|
|
allowed_types VARCHAR(255) DEFAULT 'image,document' COMMENT 'Tipos permitidos separados por coma',
|
|
message_sent_id VARCHAR(255) DEFAULT NULL COMMENT 'ID del mensaje de WhatsApp enviado',
|
|
expires_at DATETIME NOT NULL COMMENT 'Fecha de expiración del enlace',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_token (token),
|
|
INDEX idx_user_id (user_id),
|
|
INDEX idx_phone (phone_number),
|
|
INDEX idx_status (status),
|
|
INDEX idx_expires (expires_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
");
|
|
|
|
echo "✅ Tabla file_requests creada correctamente\n";
|
|
|
|
// Tabla de archivos subidos por los clientes
|
|
$pdo->exec("
|
|
CREATE TABLE IF NOT EXISTS file_request_uploads (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
request_id INT NOT NULL COMMENT 'FK a file_requests.id',
|
|
original_filename VARCHAR(255) NOT NULL,
|
|
stored_filename VARCHAR(255) NOT NULL COMMENT 'Nombre único en disco',
|
|
file_path TEXT NOT NULL COMMENT 'Ruta relativa al directorio uploads',
|
|
file_size BIGINT NOT NULL,
|
|
mime_type VARCHAR(100) NOT NULL,
|
|
media_type ENUM('image','document','video','audio','other') DEFAULT 'document',
|
|
thumbnail_path VARCHAR(255) DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_request (request_id),
|
|
FOREIGN KEY (request_id) REFERENCES file_requests(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
");
|
|
|
|
echo "✅ Tabla file_request_uploads creada correctamente\n";
|
|
echo "\n🎉 Migración completada exitosamente\n";
|
|
|
|
} catch (Exception $e) {
|
|
echo "❌ Error en migración: " . $e->getMessage() . "\n";
|
|
exit(1);
|
|
}
|