49 lines
1.4 KiB
Go
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
|
|
}
|