From c35f4b42888af8805a8c643a7293e1beeacda004 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 29 Apr 2026 23:42:27 -0500 Subject: [PATCH] up --- main.go | 2 ++ migrations/migrate.go | 76 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/main.go b/main.go index b07b5eb..b706d5c 100755 --- a/main.go +++ b/main.go @@ -42,6 +42,8 @@ func main() { // Ejecutar migraciones migrations.Migrate() } else { + // Seed automático (idempotente) de módulos del sistema + migrations.SeedRenovaciones() // Iniciar cron de vencimientos services.IniciarCron() defer services.DetenerCron() diff --git a/migrations/migrate.go b/migrations/migrate.go index e02b500..ca66e8e 100755 --- a/migrations/migrate.go +++ b/migrations/migrate.go @@ -69,5 +69,81 @@ func Migrate() { fmt.Println("Session database created and table migrated successfully.") + // Insertar módulo y submódulos de Renovaciones + SeedRenovaciones() + log.Println("Migration Completed...") } + +// SeedRenovaciones inserta el módulo "Renovaciones" y sus submódulos si no existen, +// y los asigna a todos los roles presentes en la BD. +func SeedRenovaciones() { + db := app.Http.Database.DB + + // 1. Crear/obtener módulo + var modulo models.Modules + result := db.Where("title = ?", "Renovaciones").First(&modulo) + if result.Error != nil { + modulo = models.Modules{ + Title: "Renovaciones", + Description: "Gestión de contratos, clientes y notificaciones de vencimiento", + ModifiedAt: time.Now(), + } + if err := db.Create(&modulo).Error; err != nil { + log.Printf("[SEED] Error creando módulo Renovaciones: %v", err) + return + } + log.Printf("[SEED] Módulo 'Renovaciones' creado con ID %d", modulo.ID) + } else { + log.Printf("[SEED] Módulo 'Renovaciones' ya existe (ID %d)", modulo.ID) + } + + // 2. Definir submódulos + entries := []struct{ title, desc, url string }{ + {"Contratos", "Gestión de contratos y vencimientos", "/app/contratos"}, + {"Clientes", "Clientes y datos de contacto", "/app/clientes"}, + {"Servicios", "Catálogo de servicios", "/app/servicios"}, + {"Plantillas Correo", "Editor de plantillas de correo", "/app/plantillas-correo"}, + {"Reglas de Aviso", "Reglas de notificación automática", "/app/reglas-notificacion"}, + {"Historial Notif.", "Historial de correos enviados", "/app/historial-notificaciones"}, + {"Config. SMTP", "Configuración del servidor de correo", "/app/smtp-config"}, + } + + var insertados []models.Submodules + for _, e := range entries { + var sub models.Submodules + if err := db.Where("url = ?", e.url).First(&sub).Error; err != nil { + sub = models.Submodules{ + Title: e.title, + Description: e.desc, + Url: e.url, + ModuleId: modulo.ID, + ModifiedAt: time.Now(), + } + if err := db.Create(&sub).Error; err != nil { + log.Printf("[SEED] Error creando submódulo '%s': %v", e.title, err) + continue + } + log.Printf("[SEED] Submódulo '%s' creado (ID %d)", e.title, sub.ID) + } else { + log.Printf("[SEED] Submódulo '%s' ya existe (ID %d)", sub.Title, sub.ID) + } + insertados = append(insertados, sub) + } + + // 3. Asignar a todos los roles existentes + var roles []models.Roles + if err := db.Find(&roles).Error; err != nil { + log.Printf("[SEED] Error obteniendo roles: %v", err) + return + } + for _, rol := range roles { + if err := db.Model(&rol).Association("Submodules").Append(&insertados); err != nil { + log.Printf("[SEED] Error asignando submódulos al rol '%s': %v", rol.Name, err) + } else { + log.Printf("[SEED] Submódulos de Renovaciones asignados al rol '%s'", rol.Name) + } + } + + log.Println("[SEED] Seed de Renovaciones completado.") +}