diff --git a/.env b/.env index 7cced92..303ed08 100644 --- a/.env +++ b/.env @@ -19,4 +19,5 @@ SIMRS_STAG_NAME=simrsbackup SIMRS_STAG_PORT=5432 LIS_MIKROBIOLOGI_URL=http://10.10.123.218/ -LIS_REGISTERPASIEN=registerpasien \ No newline at end of file +LIS_REGISTERPASIEN=registerpasien +LIS_EKSTRAKHASIL=ekstrakhasil \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 121bdb3..4a4d774 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,4 +28,5 @@ services: - SATUDATA_PORT=5000 # LIS MIKROBIOLOGI - LIS_MIKROBIOLOGI_URL=http://10.10.123.218/ - - LIS_REGISTERPASIEN=registerpasien \ No newline at end of file + - LIS_REGISTERPASIEN=registerpasien + - LIS_EKSTRAKHASIL=ekstrakhasil \ No newline at end of file diff --git a/internal/server/routes.go b/internal/server/routes.go index e848e69..d3e3941 100644 --- a/internal/server/routes.go +++ b/internal/server/routes.go @@ -24,6 +24,7 @@ func (s *Server) RegisterRoutes() http.Handler { mikrobiologi := v1.Group("/mikrobiologi") { mikrobiologi.POST("/sendmikro", mikrobiologiHandler.SendDataLISMikro) + mikrobiologi.POST("/ekstrakhasil", mikrobiologiHandler.EkstrakHasil) } return r } diff --git a/pkg/handlers/mikrobiologi/mikrobiologi.go b/pkg/handlers/mikrobiologi/mikrobiologi.go index 62df671..9056013 100644 --- a/pkg/handlers/mikrobiologi/mikrobiologi.go +++ b/pkg/handlers/mikrobiologi/mikrobiologi.go @@ -40,7 +40,7 @@ func SendDataLISMikro(c *gin.Context) { return } - //log.Println("REQUEST dari frontend:", req) + log.Println("REQUEST dari frontend:", req) dataMikro, errData := simrsDB.GetDataMikroBiologiByNoMR(req) if errData != nil { @@ -178,7 +178,7 @@ func SendDataLISMikro(c *gin.Context) { NamaSpesimen: value.JenisKelompok, Pengambilan: "", } - //log.Println("Sebelum masuk LIS", dataLisMikro) + log.Println("Sebelum masuk LIS", dataLisMikro) resMikro, errMikro := SendLisMikro(dataLisMikro) if errMikro != nil { log.Println(errMikro) @@ -188,7 +188,15 @@ func SendDataLISMikro(c *gin.Context) { return } - //log.Println(resMikro) + if resMikro.Status == "203" { + log.Println(resMikro) + c.JSON(http.StatusBadRequest, gin.H{ + "message": resMikro.Message, + }) + return + } + + log.Println(resMikro) reqUpdate := &mikrobiologi.ReqUpdateLisMikro{ IdxOrderMikro: value.IdxOrderMikro, @@ -212,6 +220,31 @@ func SendDataLISMikro(c *gin.Context) { }) } } - //log.Println("RESPONSE", responseMikro) + log.Println("RESPONSE", responseMikro) c.JSON(http.StatusOK, responseMikro) } + +func EkstrakHasil(c *gin.Context) { + var req mikrobiologi.RequestEkstrakhasil + + err := c.Bind(&req) + if err != nil { + log.Println(err) + c.JSON(http.StatusBadRequest, gin.H{ + "message": err, + }) + return + } + + log.Println("REQUEST dari frontend:", req) + resEkstrakHasil, errMikro := EkstrakHasilLis(req) + if errMikro != nil { + log.Println("ini error:", errMikro) + c.JSON(http.StatusBadRequest, gin.H{ + "message": errMikro.Error(), + }) + return + } + log.Println(resEkstrakHasil) + c.JSON(http.StatusOK, resEkstrakHasil) +} diff --git a/pkg/handlers/mikrobiologi/response.go b/pkg/handlers/mikrobiologi/response.go index 3d9a040..dafd2c9 100644 --- a/pkg/handlers/mikrobiologi/response.go +++ b/pkg/handlers/mikrobiologi/response.go @@ -15,7 +15,7 @@ func SendLisMikro(request *mikrobiologi.RequestLISMikro) (*mikrobiologi.Response baseUrl := os.Getenv("LIS_MIKROBIOLOGI_URL") endpoint := os.Getenv("LIS_REGISTERPASIEN") url := baseUrl + endpoint - //log.Println("URL", url) + log.Println("URL", url) reqMarshall, err := json.Marshal(request) if err != nil { @@ -26,7 +26,7 @@ func SendLisMikro(request *mikrobiologi.RequestLISMikro) (*mikrobiologi.Response "Accept": "application/json", "Content-Type": "application/json", } - //log.Println("REQUEST: ", string(reqMarshall)) + log.Println("REQUEST: ", string(reqMarshall)) req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall)) if err != nil { @@ -46,7 +46,82 @@ func SendLisMikro(request *mikrobiologi.RequestLISMikro) (*mikrobiologi.Response return nil, err } - //log.Println("dari LIS", response) + log.Println("dari LIS", response.StatusCode) + + res, err := io.ReadAll(response.Body) + if err != nil { + fmt.Println(err) + } + //log.Println("code:", response.StatusCode) + if response.StatusCode != 201 && response.StatusCode != 504 { + var responseError *mikrobiologi.ResponseError + err = json.Unmarshal(res, &responseError) + if err != nil { + log.Printf("Error unmarshalling response: %v", err) + return nil, err + } + + log.Println("MASUK SINI?") + log.Println(responseError.Error) + return nil, fmt.Errorf(responseError.Error) + } + + var responses *mikrobiologi.Response + + log.Println("RESPONSE: ", string(res)) + + if response.StatusCode == 504 { + responses.Status = "203" + responses.Message = "Server LIS error" + return responses, nil + } + + err = json.Unmarshal(res, &responses) + if err != nil { + log.Printf("Error unmarshalling response: %v", err) + return nil, err + } + + return responses, nil +} + +func EkstrakHasilLis(request mikrobiologi.RequestEkstrakhasil) ([]*mikrobiologi.RawDataEkstrakHasil, error) { + baseUrl := os.Getenv("LIS_MIKROBIOLOGI_URL") + endpoint := os.Getenv("LIS_EKSTRAKHASIL") + + url := baseUrl + endpoint + log.Println("URL", url) + + reqMarshall, err := json.Marshal(request) + if err != nil { + log.Printf("Error json marshal: %v", err) + return nil, err + } + headers := map[string]string{ + "Accept": "application/json", + "Content-Type": "application/json", + } + log.Println("REQUEST: ", string(reqMarshall)) + + req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall)) + if err != nil { + log.Printf("Error creating request: %v", err) + return nil, err + } + + for key, value := range headers { + req.Header.Set(key, value) + } + + client := http.Client{} + + response, err := client.Do(req) + if err != nil { + log.Printf("Error making external API request: %v", err) + return nil, err + } + + log.Println("dari LIS", response.StatusCode) res, err := io.ReadAll(response.Body) if err != nil { @@ -66,14 +141,23 @@ func SendLisMikro(request *mikrobiologi.RequestLISMikro) (*mikrobiologi.Response return nil, fmt.Errorf(responseError.Error) } - var responses *mikrobiologi.Response + var responses mikrobiologi.ResponseEkstrak + + log.Println("RESPONSE: ", string(res)) - //log.Println("RESPONSE: ", string(res)) err = json.Unmarshal(res, &responses) if err != nil { log.Printf("Error unmarshalling response: %v", err) return nil, err } + log.Println("RESPONSE: ", responses) + var rawData []*mikrobiologi.RawDataEkstrakHasil + err = json.Unmarshal([]byte(responses.RawData), &rawData) + if err != nil { + log.Printf("Error unmarshalling response rawdata: %v", err) + return nil, err + } - return responses, nil + log.Println("RESPONSE ekstrak hasil: ", rawData) + return rawData, nil } diff --git a/pkg/models/simrs/mikrobiologi/mikrobiologi.go b/pkg/models/simrs/mikrobiologi/mikrobiologi.go index 361b102..5317219 100644 --- a/pkg/models/simrs/mikrobiologi/mikrobiologi.go +++ b/pkg/models/simrs/mikrobiologi/mikrobiologi.go @@ -163,3 +163,28 @@ type RequestBatalMikro struct { NoLokal string `json:"no_lokal"` Alasan string `json:"alasan"` } + +type RequestEkstrakhasil struct { + Nolab string `json:"nolab"` +} + +type ResponseEkstrak struct { + HtmlLink string `json:"htmllink"` + Html string `json:"html"` + RawData string `json:"rawdata"` +} +type RawDataEkstrakHasil struct { + ID int `json:"id"` + AccNumber string `json:"accnumber"` + Template string `json:"template"` + Komponen string `json:"komponen"` + IsiData string `json:"isidata"` + CreatedBy string `json:"created_by"` + CreatedAt string `json:"created_at"` + UpdatedAt string `json:"updated_at"` +} + +type EkstrakHasil struct { + HtmlLink string `json:"htmllink"` + RawData []*RawDataEkstrakHasil `json:"rawdata"` +}