feat(notif): integrar notificaciones de tareas con NotifEventoConfig
- SeedNotifDefaults: poblar 10 eventos por defecto (tickets, servidores, tareas) - notif_dispatch: NotificarTareaAsignada/Estado/Comentario ahora respetan canal_email, canal_telegram y canal_sistema de la config de notificaciones - mail_service: añadir SendTareaAsignadaEmail y SendTareaNotifAdmin - notif_config.html: agregar eventos tarea_asignada, tarea_estado, tarea_comentario al panel de configuración para que el admin pueda activar/desactivar canales Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
107178aa97
commit
37648724f8
+27
-2
@@ -872,9 +872,34 @@ func SeedPortalClientes() {
|
||||
log.Println("[SEED] Seed de Portal de Clientes completado.")
|
||||
}
|
||||
|
||||
// SeedNotifDefaults es un stub idempotente para configuraciones de notificaciones por defecto.
|
||||
// SeedNotifDefaults inserta configuraciones de notificación por defecto (idempotente).
|
||||
// Solo crea registros que no existen; no sobreescribe cambios del admin.
|
||||
func SeedNotifDefaults() {
|
||||
log.Println("[SEED] SeedNotifDefaults: sin entradas por defecto definidas aún.")
|
||||
db := app.Http.Database.DB
|
||||
defaults := []models.NotifEventoConfig{
|
||||
// Tickets
|
||||
{Evento: "ticket_nuevo", Destinatario: "admin", CanalEmail: true, CanalTelegram: false, CanalSistema: true, Descripcion: "Admin recibe cuando el cliente abre un ticket"},
|
||||
{Evento: "ticket_respuesta_cliente", Destinatario: "admin", CanalEmail: true, CanalTelegram: false, CanalSistema: true, Descripcion: "Admin recibe cuando el cliente responde un ticket"},
|
||||
{Evento: "ticket_respuesta_admin", Destinatario: "portal_user", CanalEmail: true, CanalTelegram: false, CanalSistema: true, Descripcion: "Portal user recibe cuando el admin responde"},
|
||||
{Evento: "factura_subida", Destinatario: "portal_user", CanalEmail: true, CanalTelegram: false, CanalSistema: true, Descripcion: "Portal user recibe cuando se sube una factura"},
|
||||
// Servidores
|
||||
{Evento: "servidor_caido", Destinatario: "admin", CanalEmail: false, CanalTelegram: true, CanalSistema: true, Descripcion: "Admin recibe cuando un servidor deja de reportar"},
|
||||
{Evento: "servidor_vence_pronto", Destinatario: "admin", CanalEmail: true, CanalTelegram: true, CanalSistema: true, Descripcion: "Admin recibe cuando un VPS está próximo a vencer"},
|
||||
{Evento: "servidor_recurso_alto", Destinatario: "admin", CanalEmail: false, CanalTelegram: true, CanalSistema: true, Descripcion: "Admin recibe cuando CPU/RAM/Disco supera el umbral"},
|
||||
// Tareas
|
||||
{Evento: "tarea_asignada", Destinatario: "admin", CanalEmail: true, CanalTelegram: false, CanalSistema: true, Descripcion: "Notifica cuando se asigna una tarea a un usuario"},
|
||||
{Evento: "tarea_estado", Destinatario: "admin", CanalEmail: false, CanalTelegram: false, CanalSistema: true, Descripcion: "Notifica cuando cambia el estado de una tarea"},
|
||||
{Evento: "tarea_comentario", Destinatario: "admin", CanalEmail: false, CanalTelegram: false, CanalSistema: true, Descripcion: "Notifica cuando hay un nuevo comentario en una tarea"},
|
||||
}
|
||||
created := 0
|
||||
for _, d := range defaults {
|
||||
var existing models.NotifEventoConfig
|
||||
if err := db.Where("evento = ? AND destinatario = ?", d.Evento, d.Destinatario).First(&existing).Error; err != nil {
|
||||
db.Create(&d)
|
||||
created++
|
||||
}
|
||||
}
|
||||
log.Printf("[SEED] SeedNotifDefaults: %d nuevas configuraciones creadas.", created)
|
||||
}
|
||||
|
||||
// SeedShield es un stub idempotente para la configuración de Shield.
|
||||
|
||||
Reference in New Issue
Block a user