update structure and bridging bpjs

This commit is contained in:
2024-09-19 13:38:24 +07:00
parent e497eaeefc
commit 377f45f5a9
15 changed files with 210 additions and 27 deletions

No files matched your search

+7 -1
View File
@@ -9,4 +9,10 @@ SATUDATA_HOST=10.10.123.165
SATUDATA_USERNAME=stim
SATUDATA_PASSWORD=stim*RS54
SATUDATA_NAME=satu_db
SATUDATA_PORT=5000
SATUDATA_PORT=5000
BASEURL_BPJS=https://apijkn-dev.bpjs-kesehatan.go.id/
ANTREAN_RS=antreanrs_dev
CONS_ID=16041
USER_KEY=04a742fc834e0d3dc5b18913c8d46b90
SECRET_KEY=8pP3D5431E
+67
View File
@@ -0,0 +1,67 @@
package config
import (
"bridging-rssa/models/config"
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"fmt"
"log"
"os"
"time"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
var DB *gorm.DB
var SatuDataDB *gorm.DB
var err error
func ConnectDB() {
hostSatuData := os.Getenv("SATUDATA_HOST")
userNameSatuData := os.Getenv("SATUDATA_USERNAME")
passwordSatuData := os.Getenv("SATUDATA_PASSWORD")
dbNameSatuData := os.Getenv("SATUDATA_NAME")
portSatuData := os.Getenv("SATUDATA_PORT")
satuData := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSatuData, userNameSatuData, passwordSatuData, dbNameSatuData, portSatuData)
SatuDataDB, err = gorm.Open(postgres.Open(satuData), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to Satu Data database: ", err)
} else {
log.Println("Successfully connected to the database")
}
}
func SetHeader(cfg config.ConfigBpjs) (string, string, string, string, string) {
timenow := time.Now().UTC()
time := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
tstamp := timenow.Unix() - time.Unix()
log.Println("TIMENOW: ", timenow)
log.Println("TIME UNIX", timenow.Unix())
log.Println("T: ", time)
log.Println("T UNIX: ", time.Unix())
cfg.Cons_id = os.Getenv("CONS_ID")
cfg.User_key = os.Getenv("USER_KEY")
cfg.Secret_key = os.Getenv("SECRET_KEY")
log.Println("TIMESTAMP:", tstamp)
secret := []byte(cfg.Secret_key)
message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
hash := hmac.New(sha256.New, secret)
hash.Write(message)
// to lowercase hexits
hex.EncodeToString(hash.Sum(nil))
// to base64
X_signature := base64.StdEncoding.EncodeToString(hash.Sum(nil))
return cfg.Cons_id, cfg.Secret_key, cfg.User_key, fmt.Sprint(tstamp), X_signature
}
+1
View File
@@ -4,6 +4,7 @@ go 1.23.0
require (
github.com/andrean360/bridging-bpjs-go v1.0.1
github.com/daku10/go-lz-string v0.0.6
github.com/gin-gonic/gin v1.10.0
github.com/joho/godotenv v1.5.1
github.com/mashingan/smapping v0.1.19
+2
View File
@@ -11,6 +11,8 @@ github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
github.com/daku10/go-lz-string v0.0.6 h1:aO8FFp4QPuNp7+WNyh1DyNjGF3UbZu95tUv9xOZNsYQ=
github.com/daku10/go-lz-string v0.0.6/go.mod h1:Vk++rSG3db8HXJaHEAbxiy/ukjTmPBw/iI+SrVZDzfs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+39
View File
@@ -0,0 +1,39 @@
package bpjs
import (
"fmt"
"io"
"log"
"net/http"
)
func BPJSGetResponse(url string, cons_id string, User_keys string, tstamp string, X_signature string, kdPoly string, tanggal string, headers map[string]string) (string, error) {
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
url += param
log.Println("URL", url)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatalf("Error creating request: %v", err)
}
for key, value := range headers {
req.Header.Set(key, value)
}
log.Println("REQ", req.Header)
client := http.Client{}
response, err := client.Get(url)
if err != nil {
log.Fatalf("Error making external API request: %v", err)
}
log.Println("RESPONSE: ", response)
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
log.Println("res: ", res)
return string(res), nil
}
@@ -2,7 +2,7 @@ package bpjs
import (
"bridging-rssa/database"
"bridging-rssa/models"
"bridging-rssa/models/dokter"
"net/http"
"github.com/gin-gonic/gin"
@@ -10,7 +10,7 @@ import (
)
func GetAllSubspesialis(c *gin.Context) {
var subspesialis []models.DaftarSubspesialis
var subspesialis []dokter.DaftarSubspesialis
result := database.SatuDataDB.Debug().Raw(`SELECT * FROM "daftar_subspesialis"`).Find(&subspesialis)
if result.Error != nil {
if result.Error == gorm.ErrRecordNotFound {
+40
View File
@@ -0,0 +1,40 @@
package jadwal_dokter
import (
cfg "bridging-rssa/config"
"bridging-rssa/handlers/bpjs"
"bridging-rssa/models/config"
"fmt"
"log"
"net/http"
"os"
"github.com/gin-gonic/gin"
)
func GetJadwalDokter(c *gin.Context) {
fmt.Println("MASUK SINI KAH?")
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("ANTREAN_RS")
url := baseUrl + endpoint
kdPoly := c.Param("kdpoly")
tanggal := c.Param("tanggal")
conf := config.ConfigBpjs{}
cons_id, _, User_key, tstamp, X_signature := cfg.SetHeader(conf)
headers := map[string]string{
"X-cons-id": cons_id,
"X-timestamp": tstamp,
"X-signature": X_signature,
"user_key": User_key,
}
log.Println("Headers : ", headers)
res, err := bpjs.BPJSGetResponse(url, cons_id, User_key, tstamp, X_signature, kdPoly, tanggal, headers)
if err != nil {
log.Fatalf("Error making external API request: %v", err)
}
c.JSON(http.StatusOK, res)
}
@@ -1,13 +1,14 @@
package Vclaim
import (
"bridging-rssa/docs"
"crypto/aes"
"crypto/cipher"
"crypto/sha256"
"encoding/base64"
"errors"
"github.com/andrean360/bridging-bpjs-go/helper"
lzstring "github.com/daku10/go-lz-string"
)
func ResponseVclaim(encrypted string, key string) (string, error) {
@@ -38,9 +39,9 @@ func ResponseVclaim(encrypted string, key string) (string, error) {
mode.CryptBlocks(cipherText, cipherText)
// cipherText, _ = pkcs7.Unpad(cipherText, aes.BlockSize)
cipherText, _ = helper.Unpad(cipherText, aes.BlockSize)
// data, err := lzstring.DecompressFromEncodedUriComponent(string(cipherText))
data, err := helper.DecompressFromEncodedUriComponent(string(cipherText))
cipherText, _ = docs.Unpad(cipherText, aes.BlockSize)
data, err := lzstring.DecompressFromEncodedURIComponent(string(cipherText))
// data, err := helper.DecompressFromEncodedUriComponent(string(cipherText))
if err != nil {
return "", err
}
@@ -4,6 +4,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
@@ -52,7 +53,7 @@ func GetRequest(endpoint string, cfg interface{}) interface{} {
fmt.Println(err)
}
body, err := ioutil.ReadAll(res.Body)
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
+14 -18
View File
@@ -1,17 +1,16 @@
package main
import (
"bridging-rssa/database"
"bridging-rssa/ginHandlers"
"bridging-rssa/ginHandlers/bpjs"
"bridging-rssa/config"
ginHandlers "bridging-rssa/handlers"
"bridging-rssa/handlers/bpjs"
"bridging-rssa/handlers/jadwal_dokter"
"log"
"net/http"
_ "bridging-rssa/docs"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"github.com/rs/cors"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
@@ -28,7 +27,7 @@ func main() {
log.Fatal("Error loading .env file")
}
database.ConnectDB()
config.ConnectDB()
r := gin.Default()
@@ -42,27 +41,24 @@ func main() {
user.PUT("/update/:id", ginHandlers.UpdateUser)
user.DELETE("/delete/:id", ginHandlers.DeleteUser)
}
subspesialis := v1.Group("/subspesialis")
{
subspesialis.GET("/", bpjs.GetAllSubspesialis)
}
jadwalDokter := v1.Group("/jadwaldokter")
{
jadwalDokter.GET("/kdpoly/:kdpoly/tanggal/:tanggal", jadwal_dokter.GetJadwalDokter)
}
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.POST("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.PUT("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.DELETE("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
err = r.Run()
log.Println("JALAN DI PORT : 8081")
err = r.Run(":8081")
if err != nil {
log.Fatal(err)
}
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
AllowedHeaders: []string{"Content-Type"},
AllowCredentials: true,
})
handler := c.Handler(r)
log.Println("Server berjalan di port 8002")
log.Fatal(http.ListenAndServe(":8002", handler))
}
+7
View File
@@ -0,0 +1,7 @@
package config
type ConfigBpjs struct {
Cons_id string
Secret_key string
User_key string
}
@@ -1,4 +1,4 @@
package models
package dokter
type DaftarSubspesialis struct {
ID int `json:"id"`
+23
View File
@@ -0,0 +1,23 @@
package jadwal_dokter
type JadwalDokter struct {
Response struct {
List []ListDokter `json:"list"`
} `json:"response"`
MetaData struct {
} `json:"metadata"`
}
type ListDokter struct {
KodeSubspesialis string `json:"kodesubspesialis"`
Hari int `json:"hari"`
KapasitasPasien int `json:"kapasitaspasien"`
Libur int `json:"libur"`
NamaHari string `json:"namahari"`
Jadwal string `json:"jadwal"`
NamaSubspesialis string `json:"namasubspesialis"`
NamaDokter string `json:"namadokter"`
KodePoli string `json:"kodepoli"`
NamaPoli string `json:"namapoli"`
KodeDokter int `json:"kodedokter"`
}