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) }