This commit is contained in:
Lizandro Guarnizo
2026-04-29 23:42:27 -05:00
parent f787821444
commit c35f4b4288
2 changed files with 78 additions and 0 deletions
+2
View File
@@ -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()
+76
View File
@@ -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.")
}