103 lines
3.3 KiB
Go
103 lines
3.3 KiB
Go
package procesar
|
|
|
|
import (
|
|
"daemonService/internal/models/obtencionCodigos"
|
|
"daemonService/internal/models/obtencionCodigos/request"
|
|
"daemonService/internal/models/obtencionCodigos/response"
|
|
oc "daemonService/internal/soap/obtencionCodigo"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
type ProcesarRegistro struct {
|
|
CuisServiceModel obtencionCodigos.CuisServiceModel
|
|
}
|
|
|
|
// instaciamos procesarRegistro
|
|
func NewProcesarRegistro(
|
|
cuisServiceModel obtencionCodigos.CuisServiceModel,
|
|
) *ProcesarRegistro {
|
|
return &ProcesarRegistro{CuisServiceModel: cuisServiceModel}
|
|
}
|
|
|
|
func (s *ProcesarRegistro) CodigoProcesarRegistro(solicitud request.SolicitudCuisCufd) (interface{}, interface{}, error) {
|
|
|
|
log.Printf("Procesando código sistema: %s", solicitud.CodigoSistema)
|
|
|
|
// cargamos las variables apikey y su token
|
|
s.CuisServiceModel.TokenKey = solicitud.KeyToken
|
|
s.CuisServiceModel.TokenValue = solicitud.ValueToken
|
|
|
|
// 1. Generar solicitud SOAP
|
|
soapReq, err := codigoGenerarSOAPRequest(s.CuisServiceModel, solicitud)
|
|
if err != nil {
|
|
fmt.Printf("error generando SOAP: %v", err)
|
|
return nil, nil, fmt.Errorf("error generando SOAP: %v", err)
|
|
}
|
|
|
|
// 2. Enviar solicitud con reintentos CUIS
|
|
resp, bodyBytes, err := oc.CodigoEnviarSOAPRequest(s.CuisServiceModel, soapReq)
|
|
if err != nil {
|
|
fmt.Printf("error enviando SOAP: %v", err)
|
|
return nil, nil, fmt.Errorf("error enviando SOAP: %v", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// 3. Validar respuesta HTTP
|
|
if resp.StatusCode != http.StatusOK {
|
|
fmt.Printf("código de estado HTTP inválido: %d", resp.StatusCode)
|
|
return nil, nil, fmt.Errorf("código de estado HTTP inválido: %d", resp.StatusCode)
|
|
}
|
|
|
|
// 4. Parsear respuesta
|
|
var respCuis response.SoapBodyCuis
|
|
var respCufd response.SoapBodyCufd
|
|
|
|
switch solicitud.Cuis {
|
|
case "":
|
|
respCuis, err = oc.CuisParsearRespSOAP[[]response.CuisResponse](&s.CuisServiceModel, bodyBytes)
|
|
if err != nil {
|
|
fmt.Printf("error parseando respuesta: %v", err)
|
|
return nil, nil, fmt.Errorf("error parseando respuesta: %v", err)
|
|
}
|
|
break
|
|
default:
|
|
respCufd, err = oc.CufdParsearRespSOAP[[]response.CufdResponse](&s.CuisServiceModel, bodyBytes)
|
|
if err != nil {
|
|
fmt.Printf("error parseando respuesta: %v", err)
|
|
return nil, nil, fmt.Errorf("error parseando respuesta: %v", err)
|
|
}
|
|
break
|
|
}
|
|
|
|
// 4. Parsear respuesta
|
|
//var leyendas any
|
|
//switch s.TagNames {
|
|
//case "sincronizarListaLeyendasFactura":
|
|
// leyendas, err = soap.ParsearRespLeyendaFacturaSOAP[[]response.LeyendaDetalle](s, bodyBytes)
|
|
// //leyendas, err := soap.ParsearRespLeyendaFacturaSOAP(s, bodyBytes)
|
|
// if err != nil {
|
|
// return fmt.Errorf("error parseando respuesta: %v", err)
|
|
// }
|
|
// break
|
|
//case "sincronizarParametricaTipoDocumentoIdentidad":
|
|
// leyendas, err = soap.ParsearRespTipoDocumentoSOAP[[]response.CodigoDetalle](s, bodyBytes)
|
|
// if err != nil {
|
|
// return fmt.Errorf("error parseando respuesta: %v", err)
|
|
// }
|
|
// break
|
|
//default:
|
|
// log.Println("no ingreso por ninguna de las opciones")
|
|
//}
|
|
|
|
// 5. Guardar en base de datos
|
|
//if err := s.guardarRegistro(solicitud, cuisID, soapReq, bodyBytes, leyendas); err != nil {
|
|
//if err := repositories.GuardarRegistro(s, solicitud, cuisID, soapReq, bodyBytes, leyendas); err != nil {
|
|
// return fmt.Errorf("error guardando registro: %v", err)
|
|
//}
|
|
|
|
//return nil
|
|
return respCuis, respCufd, nil
|
|
}
|