From b4b60810a1c2613c40d2aa7ab1b1f81cbd95bb70 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 21 May 2026 10:34:01 -0500 Subject: [PATCH] feat(prov_servidor): add many2many integrations linking - ProvServidor model: add Integraciones []Submodules (many2many:prov_servidor_submodules) - GetAllProvServidor: preload Integraciones - SetProvServidorIntegraciones: new model func to replace associations - New endpoint PUT /app/provservidor/:id/integraciones - GetSubmodules: support ?limit= query param - prov_servidor.html: show integrations as badges in table, view modal, and edit modal with checkboxes to select one or more existing submodules Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- pkg/models/prov_servidor.go | 21 ++- resources/views/prov_servidor.html | 132 ++++++++++++++----- rest/controllers/prov_servidor_controller.go | 23 ++++ rest/controllers/submodules_controller.go | 6 +- rest/routes/user.go | 1 + 5 files changed, 145 insertions(+), 38 deletions(-) mode change 100755 => 100644 resources/views/prov_servidor.html diff --git a/pkg/models/prov_servidor.go b/pkg/models/prov_servidor.go index e932672..9a0cecc 100755 --- a/pkg/models/prov_servidor.go +++ b/pkg/models/prov_servidor.go @@ -9,7 +9,8 @@ import ( type ProvServidor struct { gorm.Model - Nombre string `json:"nombre" gorm:"column:nombre"` + Nombre string `json:"nombre" gorm:"column:nombre"` + Integraciones []Submodules `json:"integraciones" gorm:"many2many:prov_servidor_submodules;"` } func (ProvServidor) TableName() string { @@ -30,7 +31,7 @@ func GetAllProvServidor(search string) ([]ProvServidor, int64, error) { return nil, 0, err } - if err := db.Order("created_at DESC").Find(&items).Error; err != nil { + if err := db.Preload("Integraciones").Order("created_at DESC").Find(&items).Error; err != nil { log.Printf("Error retrieving proveedores: %v", err) return nil, 0, err } @@ -58,3 +59,19 @@ func DeleteProvServidor(provServidor ProvServidor) error { } return nil } + +// SetIntegraciones reemplaza todas las integraciones del proveedor con los IDs dados. +func SetProvServidorIntegraciones(provServidorID uint, submoduleIDs []uint) error { + db := app.Http.Database.DB + var prov ProvServidor + if err := db.First(&prov, provServidorID).Error; err != nil { + return err + } + var subs []Submodules + if len(submoduleIDs) > 0 { + if err := db.Where("id IN ?", submoduleIDs).Find(&subs).Error; err != nil { + return err + } + } + return db.Model(&prov).Association("Integraciones").Replace(subs) +} diff --git a/resources/views/prov_servidor.html b/resources/views/prov_servidor.html old mode 100755 new mode 100644 index 36ae84a..ea19d7c --- a/resources/views/prov_servidor.html +++ b/resources/views/prov_servidor.html @@ -26,6 +26,7 @@ Nombre + Integraciones @@ -33,6 +34,18 @@