Files
api-bpjs-surkon/handlers/bpjs/jadwal_dokter/jadwal_dokter.go
2024-09-25 11:53:50 +07:00

165 lines
4.7 KiB
Go

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"
)
func GetJadwalDokter(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
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)
headers := map[string]string{
"X-cons-id": cons_id,
"X-timestamp": tstamp,
"X-signature": X_signature,
"user_key": User_key,
}
var res *[]jadwal_dokter.ListDokter
log.Println("Headers : ", headers)
// 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)
if err != nil {
log.Fatalf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
}
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)
}
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)
}