131 lines
3.2 KiB
Go
131 lines
3.2 KiB
Go
package person
|
|
|
|
import (
|
|
"api-poliklinik/internal/database"
|
|
"api-poliklinik/pkg/database/mongo"
|
|
person "api-poliklinik/pkg/models/mongo/person"
|
|
_struct "api-poliklinik/pkg/models/struct"
|
|
"github.com/gin-gonic/gin"
|
|
"net/http"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func GetDataPerson(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)
|
|
dataPerson, errSelect := mongoDB.GetAllPerson(limit, skip)
|
|
if errSelect != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"message": errSelect.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"message": "success",
|
|
"data": dataPerson,
|
|
})
|
|
}
|
|
|
|
func InsertPerson(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 *person.Person
|
|
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
|
|
}
|
|
|
|
// Cek apakah identifier dengan tipe "RM" (Rekamedik) sudah ada
|
|
identifierExists := false
|
|
for i, identifier := range req.Identifier {
|
|
if identifier.Type.Text == "RM" { // Jika ada "RM", update value-nya
|
|
req.Identifier[i].Value = rekamMedikNumber
|
|
identifierExists = true
|
|
break
|
|
}
|
|
}
|
|
|
|
// Jika tidak ada "RM", tambahkan identifier Rekamedik baru
|
|
if !identifierExists {
|
|
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: "dateCreated",
|
|
ValueDisplay: dateCreated,
|
|
ValueCode: "",
|
|
},
|
|
_struct.ExtensionDetail{
|
|
URL: "UpdateCreated",
|
|
ValueDisplay: updateCreated,
|
|
ValueCode: "",
|
|
},
|
|
)
|
|
}
|
|
errInsert := mongoDB.InsertPerson(req)
|
|
if errInsert != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"message": errInsert.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": rekamMedikNumber,
|
|
"message": "Person Dengan noRM berhasil di Buat",
|
|
})
|
|
}
|