package Patient import ( "api-poliklinik/internal/database" "api-poliklinik/pkg/database/mongo" patient "api-poliklinik/pkg/models/mongo/insertpatient" _struct "api-poliklinik/pkg/models/struct" "github.com/gin-gonic/gin" "net/http" "os" "strconv" "time" ) //func InsertPatient(c *gin.Context) { // local := os.Getenv("MONGODB_DEV_LOCAL") // db := database.New(local).GetMongoDB() // if db == nil { // c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) // return // } // mongoDB := mongo.NewDatabaseServiceMongo(db) // var req *patient.Patient // err := c.Bind(&req) // if err != nil { // c.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) // return // } // // rekamMedikNumber, err := mongoDB.GetNextRekamMedikNumber() // if err != nil { // c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to generate rekamedik number"}) // return // } // // req.Identifier = append(req.Identifier, _struct.Identifier{ // Use: "usual", // Type: _struct.CodeableConcept{ // Coding: []_struct.Coding{ // { // Code: "RM", // Display: "RekamMedik", // UserSelected: true, // }, // }, // Text: "RM", // }, // Value: rekamMedikNumber, // Period: _struct.Period{ // Start: time.Now().Format("2006-01-02"), // }, // Assigner: _struct.Reference{}, // }) // // dateCreated := time.Now().Format("2006-01-02 15:04:05") // updateCreated := time.Now().Format("2006-01-02 15:04:05") // // if len(req.Extension) > 0 { // req.Extension[0].Extension = append(req.Extension[0].Extension, // _struct.ExtensionDetail{ // URL: "createdAt", // ValueDisplay: dateCreated, // ValueCode: "", // }, // _struct.ExtensionDetail{ // URL: "updatedAt", // ValueDisplay: updateCreated, // ValueCode: "", // }, // ) // } // errInsert := mongoDB.InsertPatient(req) // if errInsert != nil { // c.JSON(http.StatusInternalServerError, gin.H{"message": errInsert.Error()}) // return // } // c.JSON(http.StatusOK, gin.H{ // "data": rekamMedikNumber, // "message": "Pasien berhasil di Buat", // }) //} func GetDataBY(c *gin.Context) { local := os.Getenv("MONGODB_DEV_LOCAL") db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return } display := c.Param("display") value := c.Param("value") if display == "" || value == "" { c.JSON(http.StatusBadRequest, gin.H{"message": "Parameter 'display' dan 'value' dibutuhkan"}) return } mongoDB := mongo.NewDatabaseServiceMongo(db) dataBy, err := mongoDB.GetPatientByIdentifier(display, value) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) return } c.JSON(http.StatusOK, gin.H{ "data": dataBy, "message": "Pasien Dengan noRM berhasil di cari", }) } func GetAllPatient(c *gin.Context) { local := os.Getenv("MONGODB_DEV_LOCAL") db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return } // Default values limit := int64(0) skip := int64(0) // Ambil dari query jika tersedia if l := c.Query("limit"); l != "" { if parsed, err := strconv.ParseInt(l, 10, 64); err == nil { limit = parsed } } if s := c.Query("skip"); s != "" { if parsed, err := strconv.ParseInt(s, 10, 64); err == nil { skip = parsed } } mongoDB := mongo.NewDatabaseServiceMongo(db) dataPatient, errSelect := mongoDB.GetAllDataPatient(limit, skip) if errSelect != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": errSelect.Error()}) return } c.JSON(http.StatusOK, gin.H{ "data": dataPatient, "message": "Pasien Sukses Ter-ambil ", }) } //func GetDataIdentifier(c *gin.Context) { // local := os.Getenv("MONGODB_DEV_LOCAL") // db := database.New(local).GetMongoDB() // if db == nil { // c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) // return // } // mongoDB := mongo.NewDatabaseServiceMongo(db) // var req *patient.GetBY // err := c.Bind(&req) // if err != nil { // c.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) // } // if len(req.Identifier) == 0 || len(req.Identifier[0].Type.Coding) == 0 { // c.JSON(http.StatusBadRequest, gin.H{"message": "Identifier incomplete"}) // return // } // display := req.Identifier[0].Type.Coding[0].Display // value := req.Identifier[0].Value // // data, err := mongoDB.GetPatientByIdentifier(display, value) // if err != nil { // c.JSON(http.StatusNotFound, gin.H{"message": err.Error()}) // return // } // c.JSON(http.StatusOK, data) //} func UpdatePatient(c *gin.Context) { local := os.Getenv("MONGODB_DEV_LOCAL") db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return } mongoDB := mongo.NewDatabaseServiceMongo(db) var req *patient.UpdatePatient err := c.Bind(&req) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) return } id := req.ID if id == "" { c.JSON(http.StatusInternalServerError, gin.H{"message": "Patient ID is empty"}) return } req.ResourceType = "Patient" dateCreated := time.Now().Format("2006-01-02 15:04:05") updateCreated := time.Now().Format("2006-01-02 15:04:05") if len(req.Extension) > 0 { req.Extension[0].Extension = append(req.Extension[0].Extension, _struct.ExtensionDetail{ URL: "createdAt", ValueDisplay: dateCreated, ValueCode: "", }, _struct.ExtensionDetail{ URL: "updateAt", ValueDisplay: updateCreated, ValueCode: "", }, ) } errUpdate := mongoDB.UpdatePatient(id, req) if errUpdate != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": errUpdate.Error()}) return } c.JSON(http.StatusOK, gin.H{"message": "Pasien Sukses Ter-Update "}) } func DeletePatient(c *gin.Context) { local := os.Getenv("MONGODB_DEV_LOCAL") db := database.New(local).GetMongoDB() if db == nil { c.JSON(http.StatusInternalServerError, gin.H{"message": "Database connection failed"}) return } mongoDB := mongo.NewDatabaseServiceMongo(db) var req *patient.DeletePatient err := c.Bind(&req) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) return } id := req.ID if id == "" { c.JSON(http.StatusInternalServerError, gin.H{"message": "Patient ID is empty"}) return } deletedAt := time.Now().Format("2006-01-02 15:04:05") if len(req.Extension) > 0 { req.Extension[0].Extension = append(req.Extension[0].Extension, _struct.ExtensionDetail{ URL: "deletedAt", ValueDisplay: deletedAt, ValueCode: "", }, ) } errUpdate := mongoDB.DeletePatient(id, req) if errUpdate != nil { c.JSON(http.StatusInternalServerError, gin.H{"message": errUpdate.Error()}) return } c.JSON(http.StatusOK, gin.H{"message": "Pasien Sukses Ter-hapus"}) }