Merge pull request 'bridging-bpjs' (#2) from bridging-bpjs into master

Reviewed-on: mirza.millahsyafiq.0912/bridging-rssa#2
This commit was merged in pull request #2.
This commit is contained in:
2024-09-25 03:06:30 +00:00
13 changed files with 217 additions and 30 deletions
+42
View File
@@ -0,0 +1,42 @@
package dokter
import (
"bridging-rssa/config"
"bridging-rssa/models/dokter"
"errors"
"log"
"strconv"
"strings"
"gorm.io/gorm"
)
func GetDokter() ([]dokter.DaftarDokterRes, error) {
var listDokter []dokter.DaftarDokter
var res []dokter.DaftarDokterRes
result := config.SatuDataDB.Debug().Raw(`select "id", "HFIS_code" from "data_pegawai" where "HFIS_code" is not null`).Scan(&listDokter)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Fatalf("Error get data : %v", result.Error)
return nil, result.Error
}
log.Fatalf("Data kosong: %v", result.Error)
return nil, nil
}
log.Println("Data Pegawai: ", listDokter)
for _, v := range listDokter {
v.HfisCode = strings.TrimSpace(v.HfisCode)
hfisCode, err := strconv.Atoi(v.HfisCode)
if err != nil {
log.Fatalf("Failed Convert ID to Int %v", err)
return nil, err
}
res = append(res, dokter.DaftarDokterRes{
ID: v.ID,
HfisCode: hfisCode,
})
}
log.Println("Data Pegawai: ", res)
return res, nil
}
+39 -8
View File
@@ -3,20 +3,51 @@ package dokter
import (
"bridging-rssa/config"
"bridging-rssa/models/bpjs/jadwal_dokter"
"log"
"strconv"
"github.com/google/uuid"
)
func InsertJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) (error) {
func DeleteJadwalDokter() error {
err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter"`).Error
if err != nil {
log.Fatalf("Failed truncate data : %v", err)
return err
}
log.Println("Success truncate data")
return nil
}
func UpdateJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) (error) {
func DeleteJadwalDokterTemp() error {
err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter_temp"`).Error
if err != nil {
log.Fatalf("Failed truncate data : %v", err)
return err
}
log.Println("Success truncate data")
return nil
}
func GetJadwalDokter(req *jadwal_dokter.JadwalDokterSatuData) (error) {
var jadwalDokter *[]jadwal_dokter.JadwalDokterSatuData
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_jadwal_dokter"`).Find(&)
func InsertJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) error {
err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter" ("Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ? ,?, ?, ?, ?, ?)`, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.Status).Error
if err != nil {
log.Fatalf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
return nil
}
}
func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error {
spesialis := strconv.Itoa(reqInsert.Spesialis)
subspesialis := strconv.Itoa(reqInsert.SubSpesialis)
id := uuid.New()
err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter_temp" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ?, ?, ?, ?, ?, ?, ?)`, id, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, spesialis, subspesialis, reqInsert.Status).Error
if err != nil {
log.Fatalf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
return nil
}
+2 -3
View File
@@ -9,8 +9,8 @@ import (
"gorm.io/gorm"
)
func GetSpesialis() (*[]dokter.DaftarSpesialis, error) {
var daftarSpesialis *[]dokter.DaftarSpesialis
func GetSpesialis() ([]dokter.DaftarSpesialis, error) {
var daftarSpesialis []dokter.DaftarSpesialis
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_spesialis"`).Find(&daftarSpesialis)
if result.Error != nil {
@@ -22,6 +22,5 @@ func GetSpesialis() (*[]dokter.DaftarSpesialis, error) {
return daftarSpesialis, nil
}
log.Print(&daftarSpesialis)
return daftarSpesialis, nil
}
+3 -3
View File
@@ -9,8 +9,8 @@ import (
"gorm.io/gorm"
)
func GetSubspesialis() (*[]dokter.DaftarSubspesialis, error) {
var daftarSubspesialis *[]dokter.DaftarSubspesialis
func GetSubspesialis() ([]dokter.DaftarSubspesialis, error) {
var daftarSubspesialis []dokter.DaftarSubspesialis
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_subspesialis"`).Find(&daftarSubspesialis)
if result.Error != nil {
@@ -22,6 +22,6 @@ func GetSubspesialis() (*[]dokter.DaftarSubspesialis, error) {
return daftarSubspesialis, nil
}
log.Print(&daftarSubspesialis)
log.Println(daftarSubspesialis)
return daftarSubspesialis, nil
}
+17
View File
@@ -0,0 +1,17 @@
package utils
import "log"
// Function to convert Kode to ID
func KodeToIDConverter(kode string, kodeDokter map[string]int) int {
log.Println("Kode :", kode)
id := kodeDokter[kode]
log.Println("ID :", id)
return id
}
// Convert Hfis Code to ID Satu Data
func HfisCodeToIDConverter(kode int, kodeDokter map[int]string) string {
id := kodeDokter[kode]
return id
}
+1
View File
@@ -61,6 +61,7 @@ require (
)
require (
github.com/google/uuid v1.6.0
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
golang.org/x/text v0.18.0 // indirect
+2
View File
@@ -46,6 +46,8 @@ github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PU
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
+72 -5
View File
@@ -3,11 +3,13 @@ package jadwal_dokter
import (
cfg "bridging-rssa/config"
"bridging-rssa/database/satu_data/dokter"
"bridging-rssa/docs/utils"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
"log"
"net/http"
"os"
"strconv"
"time"
"github.com/gin-gonic/gin"
@@ -18,17 +20,49 @@ func GetJadwalDokter(c *gin.Context) {
endpoint := os.Getenv("ANTREAN_RS")
url := baseUrl + endpoint
errTruncate := dokter.DeleteJadwalDokter()
if errTruncate != nil {
log.Fatal(errTruncate)
c.JSON(http.StatusInternalServerError, errTruncate)
}
errTruncateTemp := dokter.DeleteJadwalDokterTemp()
if errTruncateTemp != nil {
log.Fatal(errTruncateTemp)
c.JSON(http.StatusInternalServerError, errTruncateTemp)
}
// Select from daftar spesialis
spesialis, err := dokter.GetSpesialis()
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var listIdSpesialis = make(map[string]int)
for _, kodeDokter := range spesialis {
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
}
subspesialis, err := dokter.GetSubspesialis()
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var listIdSubspesialis = make(map[string]int)
for _, kodeDokter := range subspesialis {
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
}
listDokter, err := dokter.GetDokter()
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var listIddokter = make(map[int]string)
for _, kodeDokter := range listDokter {
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
}
conf := config.ConfigBpjs{}
cons_id, secretKey, User_key, tstamp, X_signature := cfg.SetHeader(conf)
@@ -41,8 +75,11 @@ func GetJadwalDokter(c *gin.Context) {
}
var res *[]jadwal_dokter.ListDokter
log.Println("Headers : ", headers)
tanggal := time.Now().Format("2006-01-02")
for _, value := range *spesialis {
// var reqSelect *jadwal_dokter.JadwalDokterSatuData
var reqInsert *jadwal_dokter.JadwalDokterSatuData
for _, value := range spesialis {
tanggal := time.Now().Format("2006-01-02")
for i := 0; i < 7; i++ {
kdPoly := value.Kode
res, err = JadwalDokterGetResponse(url, secretKey, cons_id, User_key, tstamp, X_signature, kdPoly, tanggal, headers)
@@ -50,15 +87,45 @@ func GetJadwalDokter(c *gin.Context) {
log.Fatalf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
}
err = dokter.
if res == nil {
log.Println("Skip Proses")
continue
}
for _, v := range *res {
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
reqInsert = &jadwal_dokter.JadwalDokterSatuData{
Hari: v.Hari,
NamaHari: v.NamaHari,
Waktu: v.Jadwal,
Dokter: idDokter,
Spesialis: idSpesialis,
SubSpesialis: idSubspesialis,
Status: 1, // When available always set to 1
}
if reqInsert.Dokter != "" {
errInsert := dokter.InsertJadwalDokter(reqInsert)
if errInsert != nil {
log.Println(errInsert)
c.JSON(http.StatusInternalServerError, errInsert)
}
} else {
reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
if errInsertTemp != nil {
log.Println(errInsertTemp)
c.JSON(http.StatusInternalServerError, errInsertTemp)
}
}
}
date, errParse := time.Parse("2006-01-02", tanggal)
if errParse != nil {
c.JSON(http.StatusInternalServerError, errParse)
}
tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
log.Println("Tanggal :", tanggal)
}
}
c.JSON(http.StatusOK, res)
}
+5
View File
@@ -43,6 +43,11 @@ func JadwalDokterGetResponse(url string, secretKey string, cons_id string, User_
log.Fatalf("Error Unmarshaling: %v", err)
}
if jadwalDokterRaw.MetaData.Code == 201 {
log.Println("No Data Found")
return nil, nil
}
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
if err != nil {
log.Fatalf("Error Decrypt: %v", err)
+2 -2
View File
@@ -39,7 +39,7 @@ func main() {
jadwalDokter := v1.Group("/jadwaldokter")
{
jadwalDokter.GET("/kdpoly/:kdpoly/tanggal/:tanggal", jadwal_dokter.GetJadwalDokter)
jadwalDokter.GET("/", jadwal_dokter.GetJadwalDokter)
}
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
@@ -47,7 +47,7 @@ func main() {
r.PUT("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.DELETE("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
log.Println("JALAN DI PORT : 8081")
err = r.Run(":8080")
err = r.Run(":8081")
if err != nil {
log.Fatal(err)
}
+20 -8
View File
@@ -31,11 +31,23 @@ type DaftarSpesialis struct {
}
type JadwalDokterSatuData struct {
ID int `json:"id"`
Hari int `json:"Hari"`
NamaHari string `json:"Nama_hari"`
Waktu string `json:"Waktu"`
Spesialis int `json:"Spesialis"`
SubSpesialis int `json:"Sub_spesialis"`
Status int `json:"Status"`
}
ID int `gorm:"id" json:"id"`
Hari int `gorm:"Hari" json:"Hari"`
NamaHari string `gorm:"Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"Waktu" json:"Waktu"`
Dokter string `gorm:"Dokter" json:"Dokter"`
Spesialis int `gorm:"Spesialis" json:"Spesialis"`
SubSpesialis int `gorm:"Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"Status" json:"Status"`
}
type JadwalDokterTempSatuData struct {
ID int `gorm:"id" json:"id"`
Hari int `gorm:"Hari" json:"Hari"`
NamaHari string `gorm:"Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"Waktu" json:"Waktu"`
Dokter string `gorm:"Dokter" json:"Dokter"`
Spesialis string `gorm:"Spesialis" json:"Spesialis"`
SubSpesialis string `gorm:"Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"Status" json:"Status"`
}
+11
View File
@@ -0,0 +1,11 @@
package dokter
type DaftarDokter struct {
ID string `gorm:"column:id" json:"id"`
HfisCode string `gorm:"column:HFIS_code" json:"HFIS_code"`
}
type DaftarDokterRes struct {
ID string `gorm:"column:id" json:"id"`
HfisCode int `gorm:"column:HFIS_code" json:"HFIS_code"`
}
+1 -1
View File
@@ -4,4 +4,4 @@ type DaftarSpesialis struct {
ID int `json:"id"`
Kode string `json:"Kode"`
Spesialis string `json:"Spesialis"`
}
}