Files
whatsapp/migrations/create_file_requests_table.php
2026-02-21 07:37:36 -05:00

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);
}