2025-05-17 11:36:26 -04:00

49 lines
1.4 KiB
Go

package sincronizacionDatos
import (
"daemonService/internal/models"
"daemonService/internal/models/sincronizacionDatos/request"
"daemonService/internal/repositories"
"daemonService/internal/services/utils"
"daemonService/internal/soap"
"fmt"
"log"
"net/http"
)
func ProcesarRegistro(s *models.ServiceModel, solicitud request.SolicitudSincronizacion, cuisID int) (interface{}, error) {
log.Printf("Procesando código sistema: %s", solicitud.CodigoSistema)
// 1. Generar solicitud SOAP
soapReq, err := GenerarSOAPRequest(s, solicitud)
if err != nil {
return nil, fmt.Errorf("error generando SOAP: %v", err)
}
// 2. Enviar solicitud con reintentos
resp, bodyBytes, err := soap.EnviarSOAPRequest(s, soapReq)
if err != nil {
return nil, fmt.Errorf("error enviando SOAP: %v", err)
}
defer resp.Body.Close()
// 3. Validar respuesta HTTP
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("código de estado HTTP inválido: %d", resp.StatusCode)
}
// 4. Parsear respuesta
respSincronizacion, err := utils.ProcesarRespuestaSincronizacion(s.TagNames, bodyBytes)
if err != nil {
return nil, err
}
// 5. Guardar en base de datos
if err := repositories.GuardarRegistro(s, solicitud, cuisID, soapReq, bodyBytes, respSincronizacion); err != nil {
return nil, fmt.Errorf("error guardando registro: %v", err)
}
return respSincronizacion, nil
}