package icare import ( "bridging-rssa/database/satu_data/dokter" log_api "bridging-rssa/database/satu_data/log_api" "bridging-rssa/database/satu_data/pasien" "bridging-rssa/models/config" logapi "bridging-rssa/models/log_api" "encoding/json" "fmt" "log" "net/http" "os" "strconv" "strings" "time" cfg "bridging-rssa/config" ic "bridging-rssa/models/bpjs/i_care" "github.com/gin-gonic/gin" "github.com/google/uuid" ) func GetFKRTL(c *gin.Context) { baseUrl := os.Getenv("BASEURL_BPJS") endpoint := os.Getenv("I_CARE_JKN") param := os.Getenv("GET_FKRTL") url := baseUrl + endpoint + param log.Println("URL :", url) var req *ic.ReqICare err := c.Bind(&req) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } reqICare := &ic.RequestICare{ Param: req.Param, KodeDokter: req.KodeDokter, } reqJson, errMarshal := json.Marshal(reqICare) if errMarshal != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: errMarshal.Error(), }) return } log.Println("REQUEST: ", string(reqJson)) conf := config.ConfigBpjs{} icare := true header := cfg.SetHeader(icare, 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", } log.Println("Headers : ", headers) var headerStringBuilder strings.Builder for key, value := range headers { headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value)) } headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ") dpjp := strconv.Itoa(req.KodeDokter) dataDokter, err := dokter.GetHFISCode(dpjp) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } reqICare.KodeDokter, err = strconv.Atoi(dataDokter.HfisCode) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } kunjunganPasien, err := pasien.GetDataKunjunganPasien(req.IDXDaftar) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } uuid := uuid.New().String() logTimeStart := time.Now().Format("2006-01-02 15:04:05") res, err := ResponseGetFKRTL(url, header, headers, reqICare) if err != nil { responJson, errMarshal2 := json.Marshal(res) if errMarshal2 != nil { log.Println(errMarshal2) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: errMarshal2.Error(), }) return } logTimeEnd := time.Now().Format("2006-01-02 15:04:05") reqInsertLog := &logapi.DataLogAPI{ ID: uuid, DateCreated: logTimeEnd, UserAgent: req.User, IP: c.ClientIP(), Parameter: "BPJS-ICare-FKRTL", Header: headerString, Method: "POST", Url: url, Request: reqJson, Respon: responJson, ResponCode: strconv.Itoa(res.MetaData.Code), ResponTimeStart: logTimeStart, ResponTimeEnd: logTimeEnd, Comment: res.MetaData.Message, } errInsert := log_api.InsertLogAPI(reqInsertLog) if errInsert != nil { log.Println(errInsert) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: errInsert.Error(), }) return } log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } responJson, err := json.Marshal(res) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } logTimeEnd := time.Now().Format("2006-01-02 15:04:05") reqInsertLog := &logapi.DataLogAPI{ ID: uuid, DateCreated: logTimeEnd, UserAgent: req.User, IP: c.ClientIP(), Parameter: "BPJS-ICare-FKRTL", Header: headerString, Method: "POST", Url: url, Request: reqJson, Respon: responJson, ResponCode: strconv.Itoa(res.MetaData.Code), ResponTimeStart: logTimeStart, ResponTimeEnd: logTimeEnd, Comment: res.MetaData.Message, } err = log_api.InsertLogAPI(reqInsertLog) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } reqInsert := &logapi.InsertLogICare{ ID: uuid, DateCreated: logTimeEnd, Ruangan: kunjunganPasien.Ruangan, Dokter: dataDokter.ID, Kunjungan_pasien: kunjunganPasien.ID, WaktuTransaksi: logTimeEnd, } errInsert := log_api.InsertLogICare(reqInsert) if errInsert != nil { log.Println(errInsert) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: errInsert.Error(), }) return } c.JSON(http.StatusOK, res) } func GetFKTP(c *gin.Context) { baseUrl := os.Getenv("BASEURL_BPJS") endpoint := os.Getenv("I_CARE_JKN") param := os.Getenv("GET_FKRTL") url := baseUrl + endpoint + param log.Println("URL :", url) var req *ic.RequestICare err := c.Bind(&req) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } log.Println("REQUEST: ", req) 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", } log.Println("Headers : ", headers) res, err := ResponseGetFKRTL(url, header, headers, req) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &ic.Metadata{ Code: 0, Message: err.Error(), }) return } c.JSON(http.StatusOK, res) }