Files
api-bpjs-surkon/handlers/bpjs/i_care/i_care.go
2025-07-08 14:23:00 +07:00

265 lines
6.0 KiB
Go

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(false, 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)
}