Files
whatsapp/database/03_create_scheduled_messages.sql
T
2026-02-03 21:30:55 -05:00

49 lines
2.1 KiB
SQL

-- ============================================
-- MIGRACIÓN: 03_create_scheduled_messages
-- Fecha: 2026-02-03
-- Descripción: Crear tabla y vista para sistema de mensajes programados/recordatorios
-- Permite programar envío de plantillas WhatsApp en fechas/horas específicas
-- Nota: Usa IF NOT EXISTS / OR REPLACE - Es seguro ejecutar múltiples veces
-- ============================================
-- Tabla para mensajes programados y recordatorios
CREATE TABLE IF NOT EXISTS scheduled_messages (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
template_id INT NULL,
template_name VARCHAR(100) NULL,
template_language VARCHAR(10) DEFAULT 'es',
template_parameters JSON NULL COMMENT 'Parámetros para las variables de la plantilla',
message_type ENUM('text', 'template') DEFAULT 'template',
message_content TEXT NULL COMMENT 'Contenido del mensaje si es tipo text',
scheduled_date DATE NOT NULL,
scheduled_time TIME NOT NULL,
status ENUM('pending', 'sent', 'failed', 'cancelled') DEFAULT 'pending',
sent_at DATETIME NULL,
error_message TEXT NULL,
created_by INT NULL COMMENT 'ID del admin que creó el recordatorio',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_scheduled_date (scheduled_date),
INDEX idx_status (status),
INDEX idx_scheduled_datetime (scheduled_date, scheduled_time, status),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Vista para facilitar consultas con información del usuario
CREATE OR REPLACE VIEW scheduled_messages_view AS
SELECT
sm.*,
u.name as user_name,
u.phone_number,
mt.name as template_display_name,
mt.body_text as template_body,
mt.status as template_status
FROM scheduled_messages sm
LEFT JOIN users u ON sm.user_id = u.id
LEFT JOIN message_templates mt ON sm.template_id = mt.id
ORDER BY sm.scheduled_date DESC, sm.scheduled_time DESC;