diff --git a/migrations/migrate.go b/migrations/migrate.go index 53238a8..c12e103 100755 --- a/migrations/migrate.go +++ b/migrations/migrate.go @@ -75,6 +75,9 @@ func Migrate() { // Insertar módulo y submódulos de Renovaciones SeedRenovaciones() + // Insertar módulo y submódulos de Integraciones externas + SeedIntegraciones() + log.Println("Migration Completed...") } @@ -178,3 +181,79 @@ func SeedRenovaciones() { log.Println("[SEED] Seed de Renovaciones completado.") } + +// SeedIntegraciones crea el módulo "Integraciones" con los submódulos +// de Hostinger y Cloudflare, y los asigna a todos los roles existentes. +// Es idempotente: si el registro ya existe (por URL) lo reutiliza sin duplicar. +func SeedIntegraciones() { + db := app.Http.Database.DB + + // 1. Crear/obtener módulo + var modulo models.Modules + if err := db.Where("title = ?", "Integraciones").First(&modulo).Error; err != nil { + modulo = models.Modules{ + Title: "Integraciones", + Description: "Conexión con servicios externos: Hostinger, Cloudflare y más", + ModifiedAt: time.Now(), + } + if err := db.Create(&modulo).Error; err != nil { + log.Printf("[SEED] Error creando módulo Integraciones: %v", err) + return + } + log.Printf("[SEED] Módulo 'Integraciones' creado con ID %d", modulo.ID) + } else { + log.Printf("[SEED] Módulo 'Integraciones' ya existe (ID %d)", modulo.ID) + } + + // 2. Definir submódulos + entries := []struct{ title, desc, url string }{ + {"Hostinger", "Panel de VPS, dominios, hosting y DNS de Hostinger", "/app/hostinger"}, + {"Cloudflare", "Gestión de zonas, DNS, SSL y firewall en Cloudflare", "/app/cloudflare"}, + } + + 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 { + if sub.ModuleId != modulo.ID { + if err := db.Model(&sub).Update("module_id", modulo.ID).Error; err != nil { + log.Printf("[SEED] Error actualizando module_id de '%s': %v", sub.Title, err) + } else { + log.Printf("[SEED] Submódulo '%s' reasignado a módulo Integraciones", sub.Title) + } + } 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 Integraciones asignados al rol '%s'", rol.Name) + } + } + + log.Println("[SEED] Seed de Integraciones completado.") +}