-- ===================================================== -- Seeds: notification_templates -- Schema: notifications -- Descripción: Plantillas predefinidas para sistema de notificaciones multi-canal -- Relacionado: EXT-003 (Notificaciones Multi-Canal) -- Fecha: 2025-11-13 -- ===================================================== -- -- IMPORTANTE: -- - Plantillas usan sintaxis {{variable_name}} para interpolación -- - Variables disponibles en JSONB para validación -- - default_channels define canales por defecto (in_app, email, push) -- -- ===================================================== -- Template 1: Bienvenida al sistema INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'welcome_email', 'Bienvenida al Sistema', 'Email de bienvenida para nuevos usuarios', '¡Bienvenido a Gamilit, {{user_name}}!', 'Hola {{user_name}}, ¡Bienvenido a Gamilit! Estamos emocionados de tenerte con nosotros. Tu cuenta ha sido creada exitosamente con el correo: {{user_email}} Empieza tu aventura de aprendizaje explorando nuestros módulos educativos y desbloquea logros mientras aprendes. ¡Buena suerte! Equipo Gamilit', '

¡Bienvenido a Gamilit, {{user_name}}!

Estamos emocionados de tenerte con nosotros.

Tu cuenta ha sido creada exitosamente con el correo: {{user_email}}

¿Qué puedes hacer ahora?

¡Buena suerte en tu aventura de aprendizaje!

Equipo Gamilit

', '["user_name", "user_email"]'::jsonb, ARRAY['email'], true ); -- Template 2: Nueva asignación INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'new_assignment', 'Nueva Asignación', 'Notificación cuando se asigna nueva tarea al estudiante', 'Nueva asignación: {{assignment_title}}', 'Hola {{student_name}}, Tu profesor {{teacher_name}} te ha asignado una nueva tarea: 📚 {{assignment_title}} 📅 Fecha de entrega: {{due_date}} 📝 Módulo: {{module_name}} Descripción: {{assignment_description}} ¡No olvides completarla antes de la fecha límite! Accede a la plataforma para ver más detalles.', '

Nueva Asignación

Hola {{student_name}},

Tu profesor {{teacher_name}} te ha asignado una nueva tarea:

📚 {{assignment_title}}

📅 Fecha de entrega: {{due_date}}

📝 Módulo: {{module_name}}

Descripción:
{{assignment_description}}

¡No olvides completarla antes de la fecha límite!

Ver Asignación ', '["student_name", "teacher_name", "assignment_title", "assignment_description", "due_date", "module_name", "assignment_url"]'::jsonb, ARRAY['email', 'push', 'in_app'], true ); -- Template 3: Recordatorio de tarea próxima a vencer INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'assignment_reminder', 'Recordatorio de Tarea', 'Recordatorio cuando una asignación está por vencer', 'Recordatorio: {{assignment_title}} vence en {{hours_remaining}} horas', 'Hola {{student_name}}, ⏰ Recordatorio: Tu tarea está por vencer 📚 {{assignment_title}} ⏱️ Tiempo restante: {{hours_remaining}} horas 📅 Fecha límite: {{due_date}} {{completion_status}} ¡Accede a la plataforma para completarla!', '

⏰ Recordatorio de Tarea

Hola {{student_name}},

Tu tarea está por vencer:

📚 {{assignment_title}}

⏱️ Tiempo restante: {{hours_remaining}} horas

📅 Fecha límite: {{due_date}}

Estado: {{completion_status}}

Completar Ahora
', '["student_name", "assignment_title", "hours_remaining", "due_date", "completion_status", "assignment_url"]'::jsonb, ARRAY['email', 'push'], true ); -- Template 4: Logro desbloqueado INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'achievement_unlocked', 'Logro Desbloqueado', 'Notificación cuando el estudiante desbloquea un logro', '🏆 ¡Logro desbloqueado: {{achievement_name}}!', '¡Felicidades {{student_name}}! 🏆 Has desbloqueado un nuevo logro: {{achievement_name}} {{achievement_description}} 💎 Recompensa: {{ml_coins_earned}} ML Coins ¡Sigue así y desbloquea más logros!', '

🏆 ¡Logro Desbloqueado!

¡Felicidades {{student_name}}!

{{achievement_icon}}

{{achievement_name}}

{{achievement_description}}

💎 Recompensa: {{ml_coins_earned}} ML Coins

¡Sigue así y desbloquea más logros!

', '["student_name", "achievement_name", "achievement_description", "achievement_icon", "ml_coins_earned"]'::jsonb, ARRAY['in_app', 'push'], true ); -- Template 5: Mensaje del profesor INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'teacher_message', 'Mensaje del Profesor', 'Mensaje directo del profesor al estudiante', 'Mensaje de {{teacher_name}}', 'Hola {{student_name}}, Tu profesor {{teacher_name}} te ha enviado un mensaje: "{{message_content}}" {{classroom_name}} Responde a través de la plataforma.', '

Mensaje de tu Profesor

Hola {{student_name}},

Tu profesor {{teacher_name}} te ha enviado un mensaje:

"{{message_content}}"

Aula: {{classroom_name}}

Responder ', '["student_name", "teacher_name", "message_content", "classroom_name", "message_url"]'::jsonb, ARRAY['email', 'in_app'], true ); -- Template 6: Invitación a grupo/equipo INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'team_invitation', 'Invitación a Equipo', 'Invitación para unirse a un equipo o grupo de estudio', 'Te invitaron a unirte a {{team_name}}', 'Hola {{student_name}}, {{inviter_name}} te ha invitado a unirte al equipo: 👥 {{team_name}} 📚 {{team_description}} Miembros actuales: {{member_count}} ¿Quieres unirte?', '

Invitación a Equipo

Hola {{student_name}},

{{inviter_name}} te ha invitado a unirte a un equipo:

👥 {{team_name}}

{{team_description}}

Miembros actuales: {{member_count}}

✓ Aceptar ✗ Rechazar
', '["student_name", "inviter_name", "team_name", "team_description", "member_count", "accept_url", "decline_url"]'::jsonb, ARRAY['in_app', 'push'], true ); -- Template 7: Retroalimentación de ejercicio INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'exercise_feedback', 'Retroalimentación de Ejercicio', 'Notificación cuando el profesor califica y deja retroalimentación', 'Retroalimentación recibida: {{exercise_title}}', 'Hola {{student_name}}, Tu profesor {{teacher_name}} ha calificado tu ejercicio: 📝 {{exercise_title}} ⭐ Calificación: {{score}}/100 {{grade_emoji}} Retroalimentación: {{feedback_text}} XP ganados: {{xp_earned}} ML Coins: {{ml_coins_earned}}', '

Retroalimentación de Ejercicio

Hola {{student_name}},

Tu profesor {{teacher_name}} ha calificado tu ejercicio:

📝 {{exercise_title}}

{{grade_emoji}}

⭐ {{score}}/100

Retroalimentación:

{{feedback_text}}

XP Ganados

+{{xp_earned}}

ML Coins

+{{ml_coins_earned}}

Ver Detalles ', '["student_name", "teacher_name", "exercise_title", "score", "grade_emoji", "feedback_text", "xp_earned", "ml_coins_earned", "exercise_url"]'::jsonb, ARRAY['email', 'in_app'], true ); -- Template 8: Racha de días consecutivos INSERT INTO notifications.notification_templates ( template_key, name, description, subject_template, body_template, html_template, variables, default_channels, is_active ) VALUES ( 'streak_milestone', 'Racha Alcanzada', 'Notificación al alcanzar hito de racha de días consecutivos', '🔥 ¡{{streak_days}} días de racha!', '¡Increíble {{student_name}}! 🔥 Has alcanzado una racha de {{streak_days}} días consecutivos Sigue así para mantener tu racha y ganar más recompensas. 💎 Bonus de racha: {{bonus_coins}} ML Coins ¡No rompas la racha mañana!', '
🔥

¡Racha de {{streak_days}} Días!

¡Increíble {{student_name}}!

Has mantenido tu racha de aprendizaje por:

{{streak_days}}

días consecutivos

💎 Bonus de racha:

+{{bonus_coins}} ML Coins

¡Sigue así para mantener tu racha!

', '["student_name", "streak_days", "bonus_coins"]'::jsonb, ARRAY['in_app', 'push'], true ); -- Comentario final COMMENT ON TABLE notifications.notification_templates IS 'Contiene 8 plantillas predefinidas para notificaciones del sistema (DB-115 - 2025-11-13)';