Update hostinger_controller.go

This commit is contained in:
Lizandro Guarnizo
2026-05-21 23:28:13 -05:00
parent ade52025a7
commit d80c7a86d3
+37 -18
View File
@@ -401,16 +401,16 @@ func syncVencimientoFromOrders(orders []services.HostingerSubscription) {
db := app.Http.Database.DB
// Indexar suscripciones por ID para búsqueda O(1)
subMap := make(map[string]services.HostingerSubscription, len(orders))
subByID := make(map[string]services.HostingerSubscription, len(orders))
for _, sub := range orders {
subMap[sub.ID] = sub
subByID[sub.ID] = sub
}
var servidores []models.Servidor
db.Where("hostinger_subscription_id != '' AND hostinger_subscription_id IS NOT NULL").Find(&servidores)
for _, srv := range servidores {
sub, ok := subMap[srv.HostingerSubscriptionID]
sub, ok := subByID[srv.HostingerSubscriptionID]
if !ok {
continue
}
@@ -427,30 +427,48 @@ func syncVencimientoFromOrders(orders []services.HostingerSubscription) {
// syncServidoresFromVPSList actualiza specs y vencimiento de todos los servidores
// que tienen hostinger_vps_id vinculado, usando la lista de VPS ya descargada.
// El vencimiento se obtiene con una llamada al billing de cada VPS (por subscription_id).
// También auto-descubre el vínculo comparando la IP del VPS con ip_servidor.
func syncServidoresFromVPSList(client *services.HostingerClient, vpsList []services.HostingerVPS) {
db := app.Http.Database.DB
// Indexar VPS por ID
vpsMap := make(map[int]services.HostingerVPS, len(vpsList))
for _, vps := range vpsList {
vpsMap[vps.ID] = vps
// Cargar todos los servidores
var todos []models.Servidor
db.Find(&todos)
// Índice por hostinger_vps_id (ya vinculados)
byVpsID := make(map[int]*models.Servidor, len(todos))
// Índice por IP (para auto-descubrimiento)
byIP := make(map[string]*models.Servidor, len(todos))
for i := range todos {
if todos[i].HostingerVpsID != nil {
byVpsID[*todos[i].HostingerVpsID] = &todos[i]
}
if todos[i].IpServidor != "" {
byIP[todos[i].IpServidor] = &todos[i]
}
}
var servidores []models.Servidor
db.Where("hostinger_vps_id IS NOT NULL").Find(&servidores)
for _, vps := range vpsList {
// 1. Buscar por hostinger_vps_id ya guardado
srv := byVpsID[vps.ID]
for _, srv := range servidores {
if srv.HostingerVpsID == nil {
continue
// 2. Auto-descubrir por IP si no está vinculado
if srv == nil {
for _, ip4 := range vps.IPV4 {
if s, ok := byIP[ip4.Address]; ok {
srv = s
break
}
}
}
vps, ok := vpsMap[*srv.HostingerVpsID]
if !ok {
if srv == nil {
continue
}
updates := map[string]interface{}{
"hostinger_state": vps.State,
"hostinger_vps_id": vps.ID,
"hostinger_state": vps.State,
}
if len(vps.IPV4) > 0 && vps.IPV4[0].Address != "" {
updates["ip_servidor"] = vps.IPV4[0].Address
@@ -465,12 +483,14 @@ func syncServidoresFromVPSList(client *services.HostingerClient, vpsList []servi
updates["disco"] = fmt.Sprintf("%d GB", vps.DiskBytes/1024)
}
// Vencimiento: usar subscription_id del VPS o el ya guardado
// Guardar subscription_id del VPS para el puente con facturación
subID := vps.SubscriptionID
if subID == "" {
subID = srv.HostingerSubscriptionID
}
if subID != "" {
updates["hostinger_subscription_id"] = subID
// Intentar traer fecha de vencimiento desde billing
if sub, err := client.GetSubscriptionByID(subID); err == nil {
venc := sub.ExpiresAt
if venc == "" {
@@ -479,7 +499,6 @@ func syncServidoresFromVPSList(client *services.HostingerClient, vpsList []servi
if venc != "" && len(venc) >= 10 {
updates["vencimiento"] = venc[:10]
}
updates["hostinger_subscription_id"] = subID
}
}