Facturacion/daemonService/internal/services/procesar/codigoProcesarRegistroCuis.go
2025-05-17 11:36:26 -04:00

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
}