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

67 lines
1.7 KiB
Go

package api
import (
"api-soap-facturacion/internal/logger"
api1 "api-soap-facturacion/internal/soap/api"
soapPkg "api-soap-facturacion/pkg/soap"
"context"
"github.com/gin-gonic/gin"
"net/http"
"time"
)
// API1GetData maneja solicitudes GetData para API1
func (h *Handler) API1GetData(c *gin.Context) {
// Obtener logger
log := getLogger(c)
// Obtener contexto con timeout
ctx, cancel := context.WithTimeout(c.Request.Context(), h.config.App.RequestTimeout*time.Second)
defer cancel()
// Agregar ID de solicitud al contexto
requestID := c.GetHeader("X-Request-ID")
ctx = context.WithValue(ctx, soapPkg.RequestIDKey{}, requestID)
// Parsear solicitud
var requestData struct {
ID string `json:"id" binding:"required"`
Type string `json:"type" binding:"required"`
Date string `json:"date"`
}
if err := c.ShouldBindJSON(&requestData); err != nil {
log.Error("Error al parsear solicitud", logger.NewField("error", err))
c.JSON(http.StatusBadRequest, gin.H{
"error": "Error al parsear solicitud",
})
return
}
// Crear solicitud SOAP
request := api1.GetDataRequest{
Namespace: "http://api1.example.com/soap",
ID: requestData.ID,
Type: requestData.Type,
Date: requestData.Date,
}
// Llamar a API1
response, err := h.soapClients.API1.GetData(ctx, request)
if err != nil {
log.Error("Error al llamar a API1", logger.NewField("error", err))
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Error al realizar solicitud a API1",
})
return
}
// Retornar respuesta
c.JSON(http.StatusOK, gin.H{
"status": response.Status,
"resultCode": response.ResultCode,
"description": response.Description,
"data": response.Data,
})
}