This commit is contained in:
Lizandro Guarnizo
2026-05-21 23:11:01 -05:00
parent 5a8b9320f5
commit d7bcddc0b3
2 changed files with 32 additions and 6 deletions
+11 -3
View File
@@ -199,11 +199,19 @@ func (c *HostingerClient) GetVPSByID(vmID int) (*HostingerVPS, error) {
if err != nil {
return nil, err
}
// Intentar primero como objeto directo
var vps HostingerVPS
if err := json.Unmarshal(body, &vps); err != nil {
return nil, fmt.Errorf("hostinger: no se pudo interpretar respuesta VPS: %w", err)
if err := json.Unmarshal(body, &vps); err == nil && vps.ID != 0 {
return &vps, nil
}
return &vps, nil
// Fallback: respuesta envuelta en {"data": {...}}
var wrapped struct {
Data HostingerVPS `json:"data"`
}
if err := json.Unmarshal(body, &wrapped); err == nil && wrapped.Data.ID != 0 {
return &wrapped.Data, nil
}
return nil, fmt.Errorf("hostinger: no se pudo interpretar respuesta VPS (body: %s)", string(body))
}
// GetVPSList obtiene la lista de VPS/VMs.
+21 -3
View File
@@ -165,7 +165,22 @@ func UpdateServidor(c *fiber.Ctx) error {
app.Http.Database.DB.First(&actual, uid)
nombreAnterior := actual.Nombre
if err := models.UpdateServidor(m); err != nil {
// Usar map para Updates y así no perder campos con valor cero (incluido hostinger_vps_id=nil)
updateMap := map[string]interface{}{
"nombre": m.Nombre,
"ip_servidor": m.IpServidor,
"so": m.So,
"vencimiento": m.Vencimiento,
"ram": m.Ram,
"nucleos": m.Nucleos,
"disco": m.Disco,
"ultimo_ping": m.UltimoPing,
"prov_servidor_id": m.ProvServidorID,
"tipo_servidor_id": m.TipoServidorID,
"hostinger_vps_id": m.HostingerVpsID,
"hostinger_subscription_id": m.HostingerSubscriptionID,
}
if err := app.Http.Database.DB.Model(&models.Servidor{}).Where("id = ?", uid).Updates(updateMap).Error; err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"message": "Error al actualizar el servidor",
"error": err.Error(),
@@ -206,6 +221,9 @@ func SyncServidorFromHostinger(c *fiber.Ctx) error {
if err != nil {
return c.Status(fiber.StatusUnprocessableEntity).JSON(fiber.Map{"error": err.Error()})
}
if vps.ID == 0 {
return c.Status(fiber.StatusUnprocessableEntity).JSON(fiber.Map{"error": "Hostinger no devolvio datos para ese VPS ID"})
}
updates := map[string]interface{}{
"hostinger_state": vps.State,
@@ -275,11 +293,11 @@ func SyncServidorFromHostinger(c *fiber.Ctx) error {
}
if err := db.Model(&servidor).Updates(updates).Error; err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "no se pudo guardar"})
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "no se pudo guardar", "detalle": err.Error()})
}
db.First(&servidor, id)
return c.JSON(fiber.Map{"ok": true, "servidor": servidor})
return c.JSON(fiber.Map{"ok": true, "servidor": servidor, "campos_actualizados": updates})
}
func DeleteServidor(c *fiber.Ctx) error {