This commit is contained in:
Lizandro Guarnizo
2026-02-03 21:30:55 -05:00
parent 44423adb32
commit 1aae148396
89 changed files with 8581 additions and 7687 deletions
+45
View File
@@ -0,0 +1,45 @@
-- ============================================
-- MIGRACIÓN: 02_add_template_components
-- Fecha: 2026-02-03
-- Descripción: Agregar columnas para almacenar componentes de plantillas de WhatsApp
-- Esto permite capturar variables/placeholders y generar vistas previas
-- Nota: Usa IF NOT EXISTS - Es seguro ejecutar múltiples veces
-- ============================================
-- Agregar columna para el texto del body de la plantilla
ALTER TABLE message_templates
ADD COLUMN IF NOT EXISTS body_text TEXT DEFAULT NULL
COMMENT 'Texto del cuerpo de la plantilla con variables {{1}}, {{2}}, etc.';
-- Agregar columna para almacenar componentes completos en formato JSON
ALTER TABLE message_templates
ADD COLUMN IF NOT EXISTS components JSON DEFAULT NULL
COMMENT 'Componentes completos de la plantilla desde WhatsApp API (header, body, footer, buttons)';
-- Agregar columna para almacenar ejemplo de parámetros
ALTER TABLE message_templates
ADD COLUMN IF NOT EXISTS example_parameters JSON DEFAULT NULL
COMMENT 'Ejemplos de valores para los parámetros de la plantilla';
-- Agregar columna para el texto del header si existe
ALTER TABLE message_templates
ADD COLUMN IF NOT EXISTS header_text VARCHAR(255) DEFAULT NULL
COMMENT 'Texto del header de la plantilla';
-- Agregar columna para el tipo de header
ALTER TABLE message_templates
ADD COLUMN IF NOT EXISTS header_type ENUM('text', 'image', 'video', 'document') DEFAULT NULL
COMMENT 'Tipo de header de la plantilla';
-- Agregar columna para el texto del footer
ALTER TABLE message_templates
ADD COLUMN IF NOT EXISTS footer_text VARCHAR(255) DEFAULT NULL
COMMENT 'Texto del footer de la plantilla';
-- Agregar índice para búsquedas por plantilla y lenguaje
ALTER TABLE message_templates
ADD INDEX IF NOT EXISTS idx_template_language (template_name, language_code);
-- Actualizar timestamp
ALTER TABLE message_templates
ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
+48
View File
@@ -0,0 +1,48 @@
-- ============================================
-- 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;