From bd02bb83a78d9964b2b8f4a750db74efe47f2662 Mon Sep 17 00:00:00 2001 From: ahdan15 Date: Mon, 1 Dec 2025 11:32:33 +0700 Subject: [PATCH] antrean tes --- .env | 9 +- docker-compose.yml | 9 +- internal/database/database.go | 24 ++++-- internal/server/routes.go | 8 ++ pkg/database/satu_data/antrean.go | 134 ++++++++++++++++++++++++++++++ pkg/handlers/antrean/antrean.go | 89 ++++++++++++++++++++ pkg/models/antrean/antrean.go | 40 +++++++++ 7 files changed, 302 insertions(+), 11 deletions(-) create mode 100644 pkg/database/satu_data/antrean.go create mode 100644 pkg/handlers/antrean/antrean.go create mode 100644 pkg/models/antrean/antrean.go diff --git a/.env b/.env index da87e1f..8b51d15 100644 --- a/.env +++ b/.env @@ -23,4 +23,11 @@ MONGODB_DEV_PORT=27017 MONGODB_DEV_USER=admin MONGODB_DEV_PASS=stim*rs54 MONGODB_DEV_MASTER=master -MONGODB_DEV_LOCAL=local \ No newline at end of file +MONGODB_DEV_LOCAL=local + +POSTGRES_ANTREAN_USERNAME=stim_read +POSTGRES_ANTREAN_PASSWORD=itikom123 +POSTGRES_ANTREAN_HOST=10.10.123.198 +POSTGRES_ANTREAN_DATABASE=db_antrean +POSTGRES_ANTREAN_PORT=5100 +POSTGRES_ANTREAN_SSLMODE=disable \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6545c6e..8fc1409 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,4 +32,11 @@ services: - MONGODB_DEV_USER=admin - MONGODB_DEV_PASS=stim*rs54 - MONGODB_DEV_MASTER=master - - MONGODB_DEV_LOCAL=local \ No newline at end of file + - MONGODB_DEV_LOCAL=local + # DATABASE ANTREAN + - POSTGRES_ANTREAN_USERNAME=stim_read + - POSTGRES_ANTREAN_PASSWORD=itikom123 + - POSTGRES_ANTREAN_HOST=10.10.123.198 + - POSTGRES_ANTREAN_DATABASE=db_antrean + - POSTGRES_ANTREAN_PORT=5100 + - POSTGRES_ANTREAN_SSLMODE=disable \ No newline at end of file diff --git a/internal/database/database.go b/internal/database/database.go index 582ef6b..8d7d72f 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -39,11 +39,17 @@ var ( dbNameSimrs = os.Getenv("SIMRS_STAG_NAME") portSimrs = os.Getenv("SIMRS_STAG_PORT") - hostSatudata = os.Getenv("SATUDATA_HOST") - userNameSatudata = os.Getenv("SATUDATA_USER") - passwordSatudata = os.Getenv("SATUDATA_PASS") - dbNameSatudata = os.Getenv("SATUDATA_NAME") - portSatudata = os.Getenv("SATUDATA_PORT") + //hostSatudata = os.Getenv("SATUDATA_HOST") + //userNameSatudata = os.Getenv("SATUDATA_USER") + //passwordSatudata = os.Getenv("SATUDATA_PASS") + //dbNameSatudata = os.Getenv("SATUDATA_NAME") + //portSatudata = os.Getenv("SATUDATA_PORT") + + hostAntrean = os.Getenv("POSTGRES_ANTREAN_HOST") + userNameAntrean = os.Getenv("POSTGRES_ANTREAN_USERNAME") + passwordAntrean = os.Getenv("POSTGRES_ANTREAN_PASSWORD") + dbNameAntrean = os.Getenv("POSTGRES_ANTREAN_DATABASE") + portAntrean = os.Getenv("POSTGRES_ANTREAN_PORT") hostMongo = os.Getenv("MONGODB_DEV_HOST") portMongo = os.Getenv("MONGODB_DEV_PORT") @@ -86,9 +92,9 @@ func New(database ...string) Service { } else { log.Println("Successfully connected to the database") } - satudata := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSatudata, userNameSatudata, passwordSatudata, dbNameSatudata, portSatudata) + Antrean := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostAntrean, userNameAntrean, passwordAntrean, dbNameAntrean, portAntrean) - SatudataDB, err := gorm.Open(postgres.Open(satudata), &gorm.Config{}) + AntreanDB, err := gorm.Open(postgres.Open(Antrean), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to SIM database: ", err) } else { @@ -127,7 +133,7 @@ func New(database ...string) Service { log.Println("Successfully connected to MongoDB!") dbInstance = &service{ simrsDB: SimrsDB, - satuDataDB: SatudataDB, + satuDataDB: AntreanDB, mongoDB: client.Database(mongoDBName), } return dbInstance @@ -216,7 +222,7 @@ func (s *service) Close() error { func (s *service) GetDB(database string) *gorm.DB { if strings.ToLower(database) == "simrs" { return s.simrsDB - } else if strings.ToLower(database) == "satudata" { + } else if strings.ToLower(database) == "antrean" { return s.satuDataDB } log.Println("Database tidak ditemukan") diff --git a/internal/server/routes.go b/internal/server/routes.go index e05a92b..4ca135c 100644 --- a/internal/server/routes.go +++ b/internal/server/routes.go @@ -7,6 +7,7 @@ import ( "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" + AntreanHandler "template_blueprint/pkg/handlers/antrean" patientHandler "template_blueprint/pkg/handlers/patient" datapoliklinikHandler "template_blueprint/pkg/handlers/poliklinik" dataRetribusi "template_blueprint/pkg/handlers/retribusi" @@ -53,6 +54,13 @@ func (s *Server) RegisterRoutes() http.Handler { { Poliklinik.GET("/getdata/statuspelayanan/:statuspelayanan", datapoliklinikHandler.GetDataPoliklinik) } + Antrean := v1.Group("/kios") + { + Antrean.POST("/detail", AntreanHandler.GetKios) + Antrean.POST("/insert", AntreanHandler.InsertKios) + Antrean.PUT("/update/:id", AntreanHandler.UpdateKios) + Antrean.DELETE("/delete/:id", AntreanHandler.DeleteKios) + } retribusi := v1.Group("/retribusi") { retribusi.GET("/getData/Limit/:limit/Offset/:offset", dataRetribusi.GetDataRetribusi) diff --git a/pkg/database/satu_data/antrean.go b/pkg/database/satu_data/antrean.go new file mode 100644 index 0000000..ff217fb --- /dev/null +++ b/pkg/database/satu_data/antrean.go @@ -0,0 +1,134 @@ +package satu_data + +import ( + "errors" + "log" + "template_blueprint/pkg/models/antrean" +) + +func (s *DatabaseService) GetKios(ID int) ([]*antrean.Antrean, error) { + var result []*antrean.Antrean + query := `SELECT k."id", k."name" ,k.active ,k.icon , k.url , k.fk_ref_healthcare_type_id , r."name" as refnamehealth, k.fk_ref_service_type_id , +rpt."name" as refnamepayment , k.fk_sd_location_id ,k.ds_sd_location +FROM master.ms_kiosk k +JOIN master.ms_kiosk_healthcare_service h ON k.fk_ref_healthcare_type_id = h.id +JOIN reference.ref_healthcare_type r ON h.fk_ms_healthcare_service_id = r.id +left join master.ms_kiosk_payment_type p on k.fk_ref_service_type_id = p.id +left join reference.ref_payment_type rpt on p.fk_ref_payment_type_id = rpt.id +where k.id = ?` + errQuery := s.DB.Debug().Raw(query, ID).Scan(&result).Error + if errQuery != nil { + log.Println("errQuery:", errQuery) + return nil, errQuery + } + return result, nil +} + +func (s *DatabaseService) InsertKiosk(data *antrean.KioskData) error { + log.Println("InsertKiosk data:", data) + + queryKiosk := `INSERT INTO master.ms_kiosk ("name", active, icon, url, fk_ref_healthcare_type_id, + fk_ref_service_type_id, fk_sd_location_id, ds_sd_location) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + RETURNING id` + + var newKioskID int64 + err := s.DB.Raw(queryKiosk, data.Name, data.Active, data.Icon, data.URL, + data.FKRefHealthcareTypeID, data.FKRefServiceTypeID, + data.FKSDLocationID, data.DSSDLocation). + Scan(&newKioskID).Error + + if err != nil { + log.Println("Error insert ms_kiosk:", err) + return errors.New("Gagal menyimpan data kiosk") + } + + log.Println("New kiosk ID:", newKioskID) + + if data.HealthcareServiceData != nil { + queryHealthcare := `INSERT INTO master.ms_kiosk_healthcare_service + (fk_ms_kiosk_id, fk_ms_healthcare_service_id) + VALUES (?, ?)` + + errHC := s.DB.Exec(queryHealthcare, newKioskID, data.HealthcareServiceData.FKMSHealthcareServiceID).Error + if errHC != nil { + log.Println("Error insert healthcare service:", errHC) + return errors.New("Gagal menyimpan data healthcare service") + } + } + + if data.PaymentTypeData != nil { + queryPayment := `INSERT INTO master.ms_kiosk_payment_type + (fk_ms_kiosk_id, fk_ref_payment_type_id) + VALUES (?, ?)` + + errPT := s.DB.Exec(queryPayment, newKioskID, data.PaymentTypeData.FKRefPaymentTypeID).Error + if errPT != nil { + log.Println("Error insert payment type:", errPT) + return errors.New("Gagal menyimpan data payment type") + } + } + + return nil +} + +func (s *DatabaseService) UpdateKiosk(id string, data *antrean.KioskData) error { + log.Println("UpdateKiosk ID:", id, "data:", data) + + queryKiosk := `UPDATE master.ms_kiosk + SET name = ?, active = ?, icon = ?, url = ?, + fk_ref_healthcare_type_id = ?, fk_ref_service_type_id = ?, + fk_sd_location_id = ?, ds_sd_location = ? + WHERE id = ?` + + err := s.DB.Exec(queryKiosk, data.Name, data.Active, data.Icon, data.URL, + data.FKRefHealthcareTypeID, data.FKRefServiceTypeID, + data.FKSDLocationID, data.DSSDLocation, id).Error + if err != nil { + log.Println("Error update ms_kiosk:", err) + return errors.New("Gagal update data kiosk") + } + + if data.HealthcareServiceData != nil { + queryHealthcare := `UPDATE master.ms_kiosk_healthcare_service + SET fk_ms_healthcare_service_id = ? + WHERE fk_ms_kiosk_id = ?` + errHC := s.DB.Exec(queryHealthcare, data.HealthcareServiceData.FKMSHealthcareServiceID, id).Error + if errHC != nil { + log.Println("Error update healthcare service:", errHC) + return errors.New("Gagal update data healthcare service") + } + } + + if data.PaymentTypeData != nil { + queryPayment := `UPDATE master.ms_kiosk_payment_type + SET fk_ref_payment_type_id = ? + WHERE fk_ms_kiosk_id = ?` + errPT := s.DB.Exec(queryPayment, data.PaymentTypeData.FKRefPaymentTypeID, id).Error + if errPT != nil { + log.Println("Error update payment type:", errPT) + return errors.New("Gagal update data payment type") + } + } + + return nil +} + +func (s *DatabaseService) DeleteKiosk(id int64) error { + err := s.DB.Exec(`DELETE FROM master.ms_kiosk_healthcare_service WHERE fk_ms_kiosk_id = ?`, id).Error + if err != nil { + return err + } + + err = s.DB.Exec(`DELETE FROM master.ms_kiosk_payment_type WHERE fk_ms_kiosk_id = ?`, id).Error + if err != nil { + return err + } + + err = s.DB.Exec(`DELETE FROM master.ms_kiosk WHERE id = ?`, id).Error + if err != nil { + return err + } + + return nil +} diff --git a/pkg/handlers/antrean/antrean.go b/pkg/handlers/antrean/antrean.go new file mode 100644 index 0000000..e4065c9 --- /dev/null +++ b/pkg/handlers/antrean/antrean.go @@ -0,0 +1,89 @@ +package antrean + +import ( + "github.com/gin-gonic/gin" + "net/http" + "strconv" + "template_blueprint/internal/database" + connDatabase "template_blueprint/pkg/database/satu_data" + "template_blueprint/pkg/models/antrean" +) + +func GetKios(c *gin.Context) { + db := database.New().GetDB("antrean") + satudata := connDatabase.NewDatabaseService(db) + + var req *antrean.Request + err := c.Bind(&req) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + DataKios, errInsertData := satudata.GetKios(req.ID) + if errInsertData != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": errInsertData.Error()}) + return + } + c.JSON(http.StatusCreated, gin.H{ + "message": "Data Ditemukan", + "data": DataKios, + }) +} + +func InsertKios(c *gin.Context) { + db := database.New().GetDB("antrean") + satudata := connDatabase.NewDatabaseService(db) + + var req *antrean.KioskData + err := c.Bind(&req) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + errInsertData := satudata.InsertKiosk(req) + if errInsertData != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": errInsertData.Error()}) + return + } + c.JSON(http.StatusCreated, gin.H{"message": "Data Berhasil disimpan"}) +} + +func UpdateKios(c *gin.Context) { + db := database.New().GetDB("antrean") + satudata := connDatabase.NewDatabaseService(db) + ID := c.Param("id") + + var req *antrean.KioskData + err := c.Bind(&req) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + err = satudata.UpdateKiosk(ID, req) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "Data kios berhasil diupdate"}) + +} + +func DeleteKios(c *gin.Context) { + db := database.New().GetDB("antrean") + satudata := connDatabase.NewDatabaseService(db) + + idParam := c.Param("id") + id, err := strconv.ParseInt(idParam, 10, 64) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid ID"}) + return + } + if err := satudata.DeleteKiosk(id); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"message": "Kios Berhasil di delete"}) +} diff --git a/pkg/models/antrean/antrean.go b/pkg/models/antrean/antrean.go new file mode 100644 index 0000000..b31a8bd --- /dev/null +++ b/pkg/models/antrean/antrean.go @@ -0,0 +1,40 @@ +package antrean + +type Antrean struct { + ID int `gorm:"column:id" json:"id"` + Name string `gorm:"column:name" json:"name"` + Icon string `gorm:"column:icon" json:"icon"` + URL string `gorm:"column:url" json:"url"` + Active bool `gorm:"column:active" json:"active"` + FKrefHealthcare int `gorm:"column:fk_ref_healthcare_type_id" json:"healthcare_type_id"` + DisplayHealth string `gorm:"column:refnamehealth" json:"healthcare_name"` + FKrefserviceType int `gorm:"column:fk_ref_service_type_id" json:"service_type_id"` + DisplayPayment string `gorm:"column:refnamepayment" json:"payment_name"` + FKLocation string `gorm:"column:fk_sd_location_id" json:"location_id"` + DisplayLocation string `gorm:"column:ds_sd_location" json:"display_location"` +} + +type Request struct { + ID int `json:"id"` +} + +type KioskData struct { + Name string `json:"name"` + Active bool `json:"active"` + Icon string `json:"icon"` + URL string `json:"url"` + FKRefHealthcareTypeID int64 `json:"fk_ref_healthcare_type_id"` + FKRefServiceTypeID int64 `json:"fk_ref_service_type_id"` + FKSDLocationID string `json:"fk_sd_location_id"` + DSSDLocation string `json:"ds_sd_location"` + HealthcareServiceData *HealthcareServiceData `json:"healthcare_service_data,omitempty"` + PaymentTypeData *PaymentTypeData `json:"payment_type_data,omitempty"` +} + +type HealthcareServiceData struct { + FKMSHealthcareServiceID int64 `json:"fk_ms_healthcare_service_id"` +} + +type PaymentTypeData struct { + FKRefPaymentTypeID int64 `json:"fk_ref_payment_type_id"` +}