- 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>
78 lines
1.9 KiB
Go
Executable File
78 lines
1.9 KiB
Go
Executable File
package models
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/sujit-baniya/fiber-boilerplate/app"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type ProvServidor struct {
|
|
gorm.Model
|
|
Nombre string `json:"nombre" gorm:"column:nombre"`
|
|
Integraciones []Submodules `json:"integraciones" gorm:"many2many:prov_servidor_submodules;"`
|
|
}
|
|
|
|
func (ProvServidor) TableName() string {
|
|
return "prov_servidor"
|
|
}
|
|
|
|
func GetAllProvServidor(search string) ([]ProvServidor, int64, error) {
|
|
var items []ProvServidor
|
|
var total int64
|
|
db := app.Http.Database.DB.Model(&ProvServidor{})
|
|
|
|
if search != "" {
|
|
db = db.Where("nombre LIKE ?", "%"+search+"%")
|
|
}
|
|
|
|
if err := db.Count(&total).Error; err != nil {
|
|
log.Printf("Error counting proveedores: %v", err)
|
|
return nil, 0, err
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
return items, total, nil
|
|
}
|
|
|
|
func CreateProvServidor(provServidor ProvServidor) error {
|
|
if err := app.Http.Database.DB.Create(&provServidor).Error; err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func UpdateProvServidor(provServidor ProvServidor) error {
|
|
if err := app.Http.Database.DB.Model(&provServidor).Updates(provServidor).Error; err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func DeleteProvServidor(provServidor ProvServidor) error {
|
|
if err := app.Http.Database.DB.Delete(&provServidor).Error; err != nil {
|
|
return err
|
|
}
|
|
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)
|
|
}
|