package repositories import ( "context" "daemonService/internal/models" bg "daemonService/internal/models/sincronizacionDatos/bodyGeneric" "daemonService/internal/models/sincronizacionDatos/request" "encoding/json" "fmt" "time" ) // func (s *ListaLeyendasFacturaService) guardarRegistro(solicitud models.SolicitudSincronizacionLeyendas, cuisID int, soapReq string, bodyBytes []byte, leyendas []models.LeyendaDetalle) error { func GuardarRegistro[T any](s *models.ServiceModel, solicitud request.SolicitudSincronizacion, cuisID int, soapReq string, bodyBytes []byte, bodyGeneric T) error { dbCtx, dbCancel := context.WithTimeout(context.Background(), 30*time.Minute) defer dbCancel() tx, err := s.DB.BeginTx(dbCtx, nil) if err != nil { return fmt.Errorf("error iniciando transacción: %v", err) } defer func() { if err != nil { tx.Rollback() } }() solicitudJSON, _ := json.Marshal(solicitud) // Creación de la respuesta utilizando la estructura genérica respJson := bg.CustomResponse[T]{ Success: true, Status: 200, Message: s.MsgCustomResponse, Data: bodyGeneric, } respuestaJSON, _ := json.Marshal(respJson) _, err = tx.ExecContext(dbCtx, s.QueryInsert, solicitud.CodigoSistema, soapReq, string(bodyBytes), string(solicitudJSON), string(respuestaJSON), cuisID, ) //_, err = tx.ExecContext(dbCtx, ` // INSERT INTO leyendas_factura ( // codigo, // reqSoap, // respSoap, // reqJson, // respJson, // cuis_id, // fecha_creacion // ) // VALUES ($1, $2, $3, $4, $5, $6, NOW() AT TIME ZONE 'America/La_Paz') // ON CONFLICT (codigo, cuis_id) // DO UPDATE SET // reqSoap = EXCLUDED.reqSoap, // respSoap = EXCLUDED.respSoap, // reqJson = EXCLUDED.reqJson, // respJson = EXCLUDED.respJson, // cuis_id = EXCLUDED.cuis_id, // fecha_actualizacion = NOW() AT TIME ZONE 'America/La_Paz'`, // solicitud.CodigoSistema, // soapReq, // string(bodyBytes), // string(solicitudJSON), // string(respuestaJSON), // cuisID, //) if err != nil { return fmt.Errorf("error ejecutando UPSERT: %v", err) } if err := tx.Commit(); err != nil { return fmt.Errorf("error confirmando transacción: %v", err) } return nil }