diff --git a/database/satu_data/dokter/dokter.go b/database/satu_data/dokter/dokter.go new file mode 100644 index 0000000..79ddcb9 --- /dev/null +++ b/database/satu_data/dokter/dokter.go @@ -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 +} diff --git a/database/satu_data/dokter/jadwal_dokter.go b/database/satu_data/dokter/jadwal_dokter.go index 6870f91..8a40e65 100644 --- a/database/satu_data/dokter/jadwal_dokter.go +++ b/database/satu_data/dokter/jadwal_dokter.go @@ -3,20 +3,35 @@ package dokter import ( "bridging-rssa/config" "bridging-rssa/models/bpjs/jadwal_dokter" + "log" ) -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 insert data : %v", err) + return err + } + log.Println("Success insert data") return nil } -func UpdateJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) (error) { - +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 GetJadwalDokter(req *jadwal_dokter.JadwalDokterSatuData) (error) { - var jadwalDokter *[]jadwal_dokter.JadwalDokterSatuData - result := config.SatuDataDB.Debug().Raw(`select * from "daftar_jadwal_dokter"`).Find(&) +func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error { + err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter_temp" ("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 -} \ No newline at end of file +} diff --git a/database/satu_data/dokter/spesialis.go b/database/satu_data/dokter/spesialis.go index ba03896..873e554 100644 --- a/database/satu_data/dokter/spesialis.go +++ b/database/satu_data/dokter/spesialis.go @@ -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 } diff --git a/database/satu_data/dokter/subspesialis.go b/database/satu_data/dokter/subspesialis.go index 2a559fb..191fcba 100644 --- a/database/satu_data/dokter/subspesialis.go +++ b/database/satu_data/dokter/subspesialis.go @@ -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 } diff --git a/docs/utils/utils.go b/docs/utils/utils.go new file mode 100644 index 0000000..e662f18 --- /dev/null +++ b/docs/utils/utils.go @@ -0,0 +1,13 @@ +package utils + +// Function to convert Kode to ID +func KodeToIDConverter(kode string, kodeDokter map[string]int) int { + id := kodeDokter[kode] + return id +} + +// Convert Hfis Code to ID Satu Data +func HfisCodeToIDConverter(kode int, kodeDokter map[int]string) string { + id := kodeDokter[kode] + return id +} diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go index 461533a..868d631 100644 --- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go @@ -3,6 +3,7 @@ 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" @@ -18,17 +19,42 @@ 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) + } // 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 +67,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 +79,42 @@ 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 + } + idSpesialis := utils.KodeToIDConverter(kdPoly, listIdSpesialis) + idSubspesialis := utils.KodeToIDConverter(kdPoly, listIdSubspesialis) + for _, v := range *res { + 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 == "" { + errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert) + if errInsertTemp != nil { + log.Println(errInsertTemp) + } + } + errInsert := dokter.InsertJadwalDokter(reqInsert) + if errInsert != nil { + log.Println(errInsert) + c.JSON(http.StatusInternalServerError, errInsert) + } + } 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) } diff --git a/handlers/bpjs/jadwal_dokter/response.go b/handlers/bpjs/jadwal_dokter/response.go index 66d029c..7f9b053 100644 --- a/handlers/bpjs/jadwal_dokter/response.go +++ b/handlers/bpjs/jadwal_dokter/response.go @@ -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) diff --git a/main.go b/main.go index 856a9dd..5d6bc41 100644 --- a/main.go +++ b/main.go @@ -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) } diff --git a/models/bpjs/jadwal_dokter/jadwal_dokter.go b/models/bpjs/jadwal_dokter/jadwal_dokter.go index e6a16bb..224fe78 100644 --- a/models/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/models/bpjs/jadwal_dokter/jadwal_dokter.go @@ -31,11 +31,12 @@ 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"` -} \ No newline at end of file + 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"` +} diff --git a/models/dokter/dokter.go b/models/dokter/dokter.go new file mode 100644 index 0000000..d17a114 --- /dev/null +++ b/models/dokter/dokter.go @@ -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"` +} diff --git a/models/dokter/spesialis.go b/models/dokter/spesialis.go index 9ceaa3f..3e161c3 100644 --- a/models/dokter/spesialis.go +++ b/models/dokter/spesialis.go @@ -4,4 +4,4 @@ type DaftarSpesialis struct { ID int `json:"id"` Kode string `json:"Kode"` Spesialis string `json:"Spesialis"` -} +} \ No newline at end of file