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 }