Files
api-bpjs-surkon/handlers/bpjs/v_claim/VclaimBridge.go
2024-12-20 08:49:02 +07:00

158 lines
3.6 KiB
Go

package vclaim
import (
"bridging-rssa/models/config"
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"os"
cfg "bridging-rssa/config"
"github.com/gin-gonic/gin"
"github.com/mashingan/smapping"
)
type Respon_MentahDTO struct {
MetaData struct {
Code string `json:"code"`
Message string `json:"message"`
} `json:"metaData"`
Response string `json:"response"`
}
type Respon_DTO struct {
MetaData struct {
Code string `json:"code"`
Message string `json:"message"`
} `json:"metaData"`
Response interface{} `json:"response"`
}
func GetRequest(endpoint string, cfg interface{}) interface{} {
conf := ConfigBpjs{}
err := smapping.FillStruct(&conf, smapping.MapFields(&cfg))
if err != nil {
log.Fatalf("Failed map %v: ", err)
}
cons_id, Secret_key, User_key, tstamp, X_signature := SetHeader(conf)
req, _ := http.NewRequest("GET", endpoint, nil)
req.Header.Add("Content-Type", "Application/x-www-form-urlencoded")
req.Header.Add("X-cons-id", cons_id)
req.Header.Add("X-timestamp", tstamp)
req.Header.Add("X-signature", X_signature)
req.Header.Add("user_key", User_key)
res, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println(err)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
}
var resp_mentah Respon_MentahDTO
var resp Respon_DTO
json.Unmarshal([]byte(body), &resp_mentah)
resp_decrypt, _ := ResponseVclaim(string(resp_mentah.Response), string(cons_id+Secret_key+tstamp))
resp.MetaData = resp_mentah.MetaData
json.Unmarshal([]byte(resp_decrypt), &resp.Response)
return &resp
}
func PostRequest(endpoint string, cfg interface{}, data interface{}) interface{} {
conf := ConfigBpjs{}
err := smapping.FillStruct(&conf, smapping.MapFields(&cfg))
if err != nil {
log.Fatalf("Failed map %v: ", err)
}
cons_id, Secret_key, User_key, tstamp, X_signature := SetHeader(conf)
var buf bytes.Buffer
err = json.NewEncoder(&buf).Encode(data)
if err != nil {
log.Fatal(err)
}
req, _ := http.NewRequest("POST", endpoint, &buf)
req.Header.Add("Content-Type", "Application/x-www-form-urlencoded")
req.Header.Add("X-cons-id", cons_id)
req.Header.Add("X-timestamp", tstamp)
req.Header.Add("X-signature", X_signature)
req.Header.Add("user_key", User_key)
res, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println(err)
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(body))
var resp_mentah Respon_MentahDTO
var resp Respon_DTO
json.Unmarshal([]byte(body), &resp_mentah)
resp_decrypt, _ := ResponseVclaim(string(resp_mentah.Response), string(cons_id+Secret_key+tstamp))
resp.MetaData = resp_mentah.MetaData
json.Unmarshal([]byte(resp_decrypt), &resp.Response)
return &resp
}
func GetReferensiDokter(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
endpoint := os.Getenv("VCLAIM_RS_DEV")
param := os.Getenv("GET_REFERENSI_DOKTER")
dpjp := c.Param("dpjp")
url := baseUrl + endpoint + param + dpjp
conf := config.ConfigBpjs{}
header := cfg.SetHeaderDev(conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "application/json; charset=utf-8",
}
log.Println("Headers : ", headers)
res, err := ResponseGetReferensiDokter(url, header, headers)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, res.MetaData)
return
}
c.JSON(http.StatusOK, res)
}