feat: seed módulo Integraciones (Hostinger + Cloudflare) en menú del sistema

This commit is contained in:
Lizandro Guarnizo
2026-04-30 23:34:13 -05:00
parent 341395ff32
commit fbfcca4d2d
+79
View File
@@ -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.")
}