diff --git a/database/satu_data/dokter/dokter.go b/database/satu_data/dokter/dokter.go index 79ddcb9..9bebfaa 100644 --- a/database/satu_data/dokter/dokter.go +++ b/database/satu_data/dokter/dokter.go @@ -40,3 +40,18 @@ func GetDokter() ([]dokter.DaftarDokterRes, error) { log.Println("Data Pegawai: ", res) return res, nil } + +func GetDotkerByID(idDokter []string) ([]dokter.DaftarSpesialis, error) { + var daftarDokter []dokter.DaftarSpesialis + result := config.SatuDataDB.Debug().Raw(`select * from "data_pegawai" where "id" in ?`, idDokter).Find(&daftarDokter) + if result.Error != nil { + if !errors.Is(result.Error, gorm.ErrRecordNotFound) { + log.Printf("Error get data : %v", result.Error) + return nil, result.Error + } + log.Printf("Data kosong: %v", result.Error) + return daftarDokter, nil + } + + return daftarDokter, nil +} diff --git a/database/satu_data/dokter/jadwal_dokter.go b/database/satu_data/dokter/jadwal_dokter.go index 1b4aff7..ebb0239 100644 --- a/database/satu_data/dokter/jadwal_dokter.go +++ b/database/satu_data/dokter/jadwal_dokter.go @@ -9,10 +9,30 @@ import ( "github.com/google/uuid" ) +func GetJadwalDokterByDate(hari string) ([]string, error) { + var spesialis []string + errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error + if errSelect != nil { + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return spesialis, nil +} + +func GetJadwalDokterBySpesialis(hari string, spesialis string) ([]string, error) { + var listDokter []string + errSelect := config.SatuDataDB.Debug().Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and Spesialis = ? order by "Spesialis"`, hari, spesialis).Scan(&listDokter).Error + if errSelect != nil { + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return listDokter, nil +} + func DeleteJadwalDokter() error { err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter"`).Error if err != nil { - log.Fatalf("Failed truncate data : %v", err) + log.Printf("Failed truncate data : %v", err) return err } log.Println("Success truncate data") @@ -22,7 +42,7 @@ func DeleteJadwalDokter() 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) + log.Printf("Failed truncate data : %v", err) return err } log.Println("Success truncate data") @@ -32,7 +52,7 @@ func DeleteJadwalDokterTemp() 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) + log.Printf("Failed insert data : %v", err) return err } log.Println("Success insert data") @@ -45,7 +65,7 @@ func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error 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) + log.Printf("Failed insert data : %v", err) return err } log.Println("Success insert data") diff --git a/database/satu_data/dokter/spesialis.go b/database/satu_data/dokter/spesialis.go index 873e554..1ac6d6b 100644 --- a/database/satu_data/dokter/spesialis.go +++ b/database/satu_data/dokter/spesialis.go @@ -15,10 +15,25 @@ func GetSpesialis() ([]dokter.DaftarSpesialis, error) { result := config.SatuDataDB.Debug().Raw(`select * from "daftar_spesialis"`).Find(&daftarSpesialis) if result.Error != nil { if !errors.Is(result.Error, gorm.ErrRecordNotFound) { - log.Fatalf("Error get data : %v", result.Error) + log.Printf("Error get data : %v", result.Error) return nil, result.Error } - log.Fatalf("Data kosong: %v", result.Error) + log.Printf("Data kosong: %v", result.Error) + return daftarSpesialis, nil + } + + return daftarSpesialis, nil +} + +func GetSpesialisByID(idSpesialis []string) ([]dokter.DaftarSpesialis, error) { + var daftarSpesialis []dokter.DaftarSpesialis + result := config.SatuDataDB.Debug().Raw(`select * from "daftar_spesialis" where "id" in ?`, idSpesialis).Find(&daftarSpesialis) + if result.Error != nil { + if !errors.Is(result.Error, gorm.ErrRecordNotFound) { + log.Printf("Error get data : %v", result.Error) + return nil, result.Error + } + log.Printf("Data kosong: %v", result.Error) return daftarSpesialis, nil } diff --git a/docs/utils/utils.go b/docs/utils/utils.go index 70f4cd9..d0e571f 100644 --- a/docs/utils/utils.go +++ b/docs/utils/utils.go @@ -1,6 +1,9 @@ package utils -import "log" +import ( + "log" + "strings" +) // Function to convert Kode to ID func KodeToIDConverter(kode string, kodeDokter map[string]int) int { @@ -15,3 +18,21 @@ func HfisCodeToIDConverter(kode int, kodeDokter map[int]string) string { id := kodeDokter[kode] return id } + +func ConvertDay(day string) string { + dayTranslations := map[string]string{ + "sunday": "MINGGU", + "monday": "SENIN", + "tuesday": "SELASA", + "wednesday": "RABU", + "thursday": "KAMIS", + "friday": "JUMAT", + "saturday": "SABTU", + } + + dayLower := strings.ToLower(day) + if translatedDay, exists := dayTranslations[dayLower]; exists { + return translatedDay + } + return day +} diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go index abc1f8b..1eaca31 100644 --- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go @@ -129,3 +129,36 @@ func GetJadwalDokter(c *gin.Context) { } c.JSON(http.StatusOK, res) } + +func GetSpesialisByDate(c *gin.Context) { + tanggal := c.Param("tanggal") + date, err := time.Parse("2006-01-02", tanggal) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + hari := date.Local().Weekday().String() + hari = utils.ConvertDay(hari) + idSpesialis, err := dokter.GetJadwalDokterByDate(hari) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + listSpesialis, err := dokter.GetSpesialisByID(idSpesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + c.JSON(http.StatusOK, listSpesialis) +} + +func GetDokterBySpesialis(c *gin.Context) { + spesialis := c.Param("spesialis") + hari := c.Param("hari") + idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + listSpesialis, err := dokter.GetDotkerByID(idDokter) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + c.JSON(http.StatusOK, listSpesialis) +} diff --git a/main.go b/main.go index 5d6bc41..1eef75e 100644 --- a/main.go +++ b/main.go @@ -40,6 +40,7 @@ func main() { jadwalDokter := v1.Group("/jadwaldokter") { jadwalDokter.GET("/", jadwal_dokter.GetJadwalDokter) + jadwalDokter.GET("/tanggal/:tanggal", jadwal_dokter.GetSpesialisByDate) } r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) diff --git a/models/dokter/dokter.go b/models/dokter/dokter.go index d17a114..aa4ca38 100644 --- a/models/dokter/dokter.go +++ b/models/dokter/dokter.go @@ -9,3 +9,7 @@ type DaftarDokterRes struct { ID string `gorm:"column:id" json:"id"` HfisCode int `gorm:"column:HFIS_code" json:"HFIS_code"` } + +type NamaLengkap struct { + +} \ No newline at end of file