From d7bcddc0b3ba86d7612a4e51bb66cfce1b0bd10d Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 21 May 2026 23:11:01 -0500 Subject: [PATCH] up --- pkg/services/hostinger_service.go | 14 +++++++++++--- rest/controllers/servidor_controller.go | 24 +++++++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/pkg/services/hostinger_service.go b/pkg/services/hostinger_service.go index 2d6eace..a8e4a15 100644 --- a/pkg/services/hostinger_service.go +++ b/pkg/services/hostinger_service.go @@ -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. diff --git a/rest/controllers/servidor_controller.go b/rest/controllers/servidor_controller.go index 879d7cd..a658a20 100755 --- a/rest/controllers/servidor_controller.go +++ b/rest/controllers/servidor_controller.go @@ -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 {