Files
2025-05-14 09:44:08 +07:00

688 lines
17 KiB
Go

package extension
import (
"api-poliklinik/internal/database"
"api-poliklinik/pkg/database/mongo"
connDatabase "api-poliklinik/pkg/database/satu_data"
mongomaster "api-poliklinik/pkg/models/mongo/master/masteraddress"
_struct "api-poliklinik/pkg/models/struct"
"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson/primitive"
"log"
"net/http"
"os"
"time"
)
func Migrasibahasa(c *gin.Context) {
db := database.New().GetDB("simrs")
simrs := connDatabase.NewDatabaseService(db)
datakomunikasi := simrs.Getbahasa()
if datakomunikasi == nil || len(datakomunikasi) == 0 {
c.JSON(http.StatusNotFound, gin.H{
"status": "error",
"message": "Tidak ada data pasien untuk dimigrasi",
})
return
}
local := os.Getenv("MONGODB_DEV_MASTER")
mongoDBConn := database.New(local).GetMongoDB()
if mongoDBConn == nil {
c.JSON(http.StatusInternalServerError, gin.H{
"status": "error",
"message": "Koneksi database MongoDB gagal",
})
return
}
mongoDB := mongo.NewDatabaseServiceMongo(mongoDBConn)
migratedCount := 0
failedCount := 0
var migratedIDs []string
for _, komunikasi := range datakomunikasi {
dateCreated := time.Now().Format("2006-01-02 15:04:05")
objectID := primitive.NewObjectID()
var fhirkomunikasi = mongomaster.Communication{
ResourceType: "Communication",
ID: objectID,
}
fhirkomunikasi.Identifier = []_struct.Identifier{
{
Use: "usual",
System: "",
Value: komunikasi.IDBahasa,
Type: _struct.CodeableConcept{
Coding: []_struct.Coding{
{
System: "",
Version: "",
Code: "idxbahasa",
Display: "ID m_bahasa Simrs 3.0",
UserSelected: true,
},
},
Text: "ID m_bahasa Simrs 3.0",
},
Period: _struct.Period{
Start: "",
End: "",
},
Assigner: _struct.Reference{
Reference: "",
Display: "",
},
},
}
fhirkomunikasi.Status = "active"
fhirkomunikasi.Name = komunikasi.NamaBahasa
fhirkomunikasi.Description = ""
fhirkomunikasi.Period = _struct.Period{
Start: "",
End: "",
}
fhirkomunikasi.CreatedAt = dateCreated
fhirkomunikasi.UpdatedAt = dateCreated
err := mongoDB.Insertcommunication(fhirkomunikasi)
if err != nil {
log.Printf("Gagal migrasi data bahasa %s: %v", komunikasi.IDBahasa, err)
failedCount++
continue
}
migratedIDs = append(migratedIDs, objectID.Hex())
migratedCount++
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"message": "Migrasi data bahasa ke FHIR berhasil",
"total": len(datakomunikasi),
"migrated": migratedCount,
"failed": failedCount,
"migrated_ids": migratedIDs,
"timestamp": time.Now().Format(time.RFC3339),
})
}
func Migrasidisbilitas(c *gin.Context) {
db := database.New().GetDB("simrs")
simrs := connDatabase.NewDatabaseService(db)
datadisabilitas := simrs.Getdisabilitas()
if datadisabilitas == nil || len(datadisabilitas) == 0 {
c.JSON(http.StatusNotFound, gin.H{
"status": "error",
"message": "Tidak ada data pasien untuk dimigrasi",
})
return
}
local := os.Getenv("MONGODB_DEV_MASTER")
mongoDBConn := database.New(local).GetMongoDB()
if mongoDBConn == nil {
c.JSON(http.StatusInternalServerError, gin.H{
"status": "error",
"message": "Koneksi database MongoDB gagal",
})
return
}
mongoDB := mongo.NewDatabaseServiceMongo(mongoDBConn)
migratedCount := 0
failedCount := 0
var migratedIDs []string
for _, disabilitas := range datadisabilitas {
dateCreated := time.Now().Format("2006-01-02 15:04:05")
objectID := primitive.NewObjectID()
var fhirdisabilitas = mongomaster.Disability{
ResourceType: "Disability",
ID: objectID,
}
fhirdisabilitas.Identifier = []_struct.Identifier{
{
Use: "usual",
System: "",
Value: disabilitas.IDDisabilitas,
Type: _struct.CodeableConcept{
Coding: []_struct.Coding{
{
System: "",
Version: "",
Code: "kode_disabilitas",
Display: "ID m_disabilitas Simrs 3.0",
UserSelected: true,
},
},
Text: "ID m_disabilitas Simrs 3.0",
},
Period: _struct.Period{
Start: "",
End: "",
},
Assigner: _struct.Reference{
Reference: "",
Display: "",
},
},
}
fhirdisabilitas.Status = "active"
fhirdisabilitas.Name = disabilitas.NamaDisabilitas
fhirdisabilitas.Description = ""
fhirdisabilitas.Period = _struct.Period{
Start: "",
End: "",
}
fhirdisabilitas.CreatedAt = dateCreated
fhirdisabilitas.UpdatedAt = dateCreated
err := mongoDB.Insertdisability(fhirdisabilitas)
if err != nil {
log.Printf("Gagal migrasi data disabilitas %s: %v", disabilitas.IDDisabilitas, err)
failedCount++
continue
}
migratedIDs = append(migratedIDs, objectID.Hex())
migratedCount++
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"message": "Migrasi data disabilitas ke FHIR berhasil",
"total": len(datadisabilitas),
"migrated": migratedCount,
"failed": failedCount,
"migrated_ids": migratedIDs,
"timestamp": time.Now().Format(time.RFC3339),
})
}
func Migrasipendidikan(c *gin.Context) {
db := database.New().GetDB("simrs")
simrs := connDatabase.NewDatabaseService(db)
datapendidikan := simrs.Getpendidikan()
if datapendidikan == nil || len(datapendidikan) == 0 {
c.JSON(http.StatusNotFound, gin.H{
"status": "error",
"message": "Tidak ada data pasien untuk dimigrasi",
})
return
}
local := os.Getenv("MONGODB_DEV_MASTER")
mongoDBConn := database.New(local).GetMongoDB()
if mongoDBConn == nil {
c.JSON(http.StatusInternalServerError, gin.H{
"status": "error",
"message": "Koneksi database MongoDB gagal",
})
return
}
mongoDB := mongo.NewDatabaseServiceMongo(mongoDBConn)
migratedCount := 0
failedCount := 0
var migratedIDs []string
for _, pendidikan := range datapendidikan {
dateCreated := time.Now().Format("2006-01-02 15:04:05")
objectID := primitive.NewObjectID()
var fhirpendidikan = mongomaster.Education{
ResourceType: "Education",
ID: objectID,
}
fhirpendidikan.Identifier = []_struct.Identifier{
{
Use: "usual",
System: "",
Value: pendidikan.IDPendidikan,
Type: _struct.CodeableConcept{
Coding: []_struct.Coding{
{
System: "",
Version: "",
Code: "id_pendidikan",
Display: "ID m_pendidikan_pasien Simrs 3.0",
UserSelected: true,
},
},
Text: "ID m_pendidikan_pasien Simrs 3.0",
},
Period: _struct.Period{
Start: "",
End: "",
},
Assigner: _struct.Reference{
Reference: "",
Display: "",
},
},
}
fhirpendidikan.Status = "active"
fhirpendidikan.Name = pendidikan.NamaPendidikan
fhirpendidikan.Description = ""
fhirpendidikan.Period = _struct.Period{
Start: "",
End: "",
}
fhirpendidikan.CreatedAt = dateCreated
fhirpendidikan.UpdatedAt = dateCreated
err := mongoDB.Inserteducation(fhirpendidikan)
if err != nil {
log.Printf("Gagal migrasi data pendidikan %s: %v", pendidikan.IDPendidikan, err)
failedCount++
continue
}
migratedIDs = append(migratedIDs, objectID.Hex())
migratedCount++
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"message": "Migrasi data pendidikan ke FHIR berhasil",
"total": len(datapendidikan),
"migrated": migratedCount,
"failed": failedCount,
"migrated_ids": migratedIDs,
"timestamp": time.Now().Format(time.RFC3339),
})
}
func Migrasipekerjaan(c *gin.Context) {
db := database.New().GetDB("simrs")
simrs := connDatabase.NewDatabaseService(db)
datapekerjaan := simrs.Getpekerjaan()
if datapekerjaan == nil || len(datapekerjaan) == 0 {
c.JSON(http.StatusNotFound, gin.H{
"status": "error",
"message": "Tidak ada data pasien untuk dimigrasi",
})
return
}
local := os.Getenv("MONGODB_DEV_MASTER")
mongoDBConn := database.New(local).GetMongoDB()
if mongoDBConn == nil {
c.JSON(http.StatusInternalServerError, gin.H{
"status": "error",
"message": "Koneksi database MongoDB gagal",
})
return
}
mongoDB := mongo.NewDatabaseServiceMongo(mongoDBConn)
migratedCount := 0
failedCount := 0
var migratedIDs []string
for _, pekerjaan := range datapekerjaan {
dateCreated := time.Now().Format("2006-01-02 15:04:05")
objectID := primitive.NewObjectID()
var fhirpekerjaan = mongomaster.Job{
ResourceType: "Job",
ID: objectID,
}
fhirpekerjaan.Identifier = []_struct.Identifier{
{
Use: "usual",
System: "",
Value: pekerjaan.IDPekerjaan,
Type: _struct.CodeableConcept{
Coding: []_struct.Coding{
{
System: "",
Version: "",
Code: "idxpekerjaan",
Display: "ID m_pekerjaan Simrs 3.0",
UserSelected: true,
},
},
Text: "ID m_pekerjaan Simrs 3.0",
},
Period: _struct.Period{
Start: "",
End: "",
},
Assigner: _struct.Reference{
Reference: "",
Display: "",
},
},
}
fhirpekerjaan.Status = "active"
fhirpekerjaan.Name = pekerjaan.NamaPekerjaan
fhirpekerjaan.Description = ""
fhirpekerjaan.Period = _struct.Period{
Start: "",
End: "",
}
fhirpekerjaan.CreatedAt = dateCreated
fhirpekerjaan.UpdatedAt = dateCreated
err := mongoDB.Insertjob(fhirpekerjaan)
if err != nil {
log.Printf("Gagal migrasi data pekerjaan %s: %v", pekerjaan.IDPekerjaan, err)
failedCount++
continue
}
migratedIDs = append(migratedIDs, objectID.Hex())
migratedCount++
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"message": "Migrasi data pekerjaan ke FHIR berhasil",
"total": len(datapekerjaan),
"migrated": migratedCount,
"failed": failedCount,
"migrated_ids": migratedIDs,
"timestamp": time.Now().Format(time.RFC3339),
})
}
func Migrasipernikahan(c *gin.Context) {
db := database.New().GetDB("simrs")
simrs := connDatabase.NewDatabaseService(db)
datapernikahan := simrs.Getstatus()
if datapernikahan == nil || len(datapernikahan) == 0 {
c.JSON(http.StatusNotFound, gin.H{
"status": "error",
"message": "Tidak ada data pasien untuk dimigrasi",
})
return
}
local := os.Getenv("MONGODB_DEV_MASTER")
mongoDBConn := database.New(local).GetMongoDB()
if mongoDBConn == nil {
c.JSON(http.StatusInternalServerError, gin.H{
"status": "error",
"message": "Koneksi database MongoDB gagal",
})
return
}
mongoDB := mongo.NewDatabaseServiceMongo(mongoDBConn)
migratedCount := 0
failedCount := 0
var migratedIDs []string
for _, pernikahan := range datapernikahan {
dateCreated := time.Now().Format("2006-01-02 15:04:05")
objectID := primitive.NewObjectID()
var fhirpernikahan = mongomaster.MartialStatus{
ResourceType: "Martial Status",
ID: objectID,
}
fhirpernikahan.Identifier = []_struct.Identifier{
{
Use: "usual",
System: "",
Value: pernikahan.IDStatus,
Type: _struct.CodeableConcept{
Coding: []_struct.Coding{
{
System: "",
Version: "",
Code: "idxstatus",
Display: "ID m_status_pasien Simrs 3.0",
UserSelected: true,
},
},
Text: "ID m_status_pasien Simrs 3.0",
},
Period: _struct.Period{
Start: "",
End: "",
},
Assigner: _struct.Reference{
Reference: "",
Display: "",
},
},
}
fhirpernikahan.Status = "active"
fhirpernikahan.Name = pernikahan.NamaStatus
fhirpernikahan.Description = ""
fhirpernikahan.Period = _struct.Period{
Start: "",
End: "",
}
fhirpernikahan.CreatedAt = dateCreated
fhirpernikahan.UpdatedAt = dateCreated
err := mongoDB.Insertmartial(fhirpernikahan)
if err != nil {
log.Printf("Gagal migrasi data pernikahan %s: %v", pernikahan.IDStatus, err)
failedCount++
continue
}
migratedIDs = append(migratedIDs, objectID.Hex())
migratedCount++
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"message": "Migrasi data pernikahan ke FHIR berhasil",
"total": len(datapernikahan),
"migrated": migratedCount,
"failed": failedCount,
"migrated_ids": migratedIDs,
"timestamp": time.Now().Format(time.RFC3339),
})
}
func Migrasiagama(c *gin.Context) {
db := database.New().GetDB("simrs")
simrs := connDatabase.NewDatabaseService(db)
dataagama := simrs.Getagama()
if dataagama == nil || len(dataagama) == 0 {
c.JSON(http.StatusNotFound, gin.H{
"status": "error",
"message": "Tidak ada data pasien untuk dimigrasi",
})
return
}
local := os.Getenv("MONGODB_DEV_MASTER")
mongoDBConn := database.New(local).GetMongoDB()
if mongoDBConn == nil {
c.JSON(http.StatusInternalServerError, gin.H{
"status": "error",
"message": "Koneksi database MongoDB gagal",
})
return
}
mongoDB := mongo.NewDatabaseServiceMongo(mongoDBConn)
migratedCount := 0
failedCount := 0
var migratedIDs []string
for _, agama := range dataagama {
dateCreated := time.Now().Format("2006-01-02 15:04:05")
objectID := primitive.NewObjectID()
var fhiragama = mongomaster.Religion{
ResourceType: "Religion",
ID: objectID,
}
fhiragama.Identifier = []_struct.Identifier{
{
Use: "usual",
System: "",
Value: agama.IDAgama,
Type: _struct.CodeableConcept{
Coding: []_struct.Coding{
{
System: "",
Version: "",
Code: "idagama",
Display: "ID m_agama_pasien Simrs 3.0",
UserSelected: true,
},
},
Text: "ID m_agama_pasien Simrs 3.0",
},
Period: _struct.Period{
Start: "",
End: "",
},
Assigner: _struct.Reference{
Reference: "",
Display: "",
},
},
}
fhiragama.Status = "active"
fhiragama.Name = agama.NamaAgama
fhiragama.Description = ""
fhiragama.Period = _struct.Period{
Start: "",
End: "",
}
fhiragama.CreatedAt = dateCreated
fhiragama.UpdatedAt = dateCreated
err := mongoDB.Insertreligion(fhiragama)
if err != nil {
log.Printf("Gagal migrasi data agama %s: %v", agama.IDAgama, err)
failedCount++
continue
}
migratedIDs = append(migratedIDs, objectID.Hex())
migratedCount++
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"message": "Migrasi data agama ke FHIR berhasil",
"total": len(dataagama),
"migrated": migratedCount,
"failed": failedCount,
"migrated_ids": migratedIDs,
"timestamp": time.Now().Format(time.RFC3339),
})
}
func Migrasisuku(c *gin.Context) {
db := database.New().GetDB("simrs")
simrs := connDatabase.NewDatabaseService(db)
datasuku := simrs.Getsuku()
if datasuku == nil || len(datasuku) == 0 {
c.JSON(http.StatusNotFound, gin.H{
"status": "error",
"message": "Tidak ada data pasien untuk dimigrasi",
})
return
}
local := os.Getenv("MONGODB_DEV_MASTER")
mongoDBConn := database.New(local).GetMongoDB()
if mongoDBConn == nil {
c.JSON(http.StatusInternalServerError, gin.H{
"status": "error",
"message": "Koneksi database MongoDB gagal",
})
return
}
mongoDB := mongo.NewDatabaseServiceMongo(mongoDBConn)
migratedCount := 0
failedCount := 0
var migratedIDs []string
for _, suku := range datasuku {
dateCreated := time.Now().Format("2006-01-02 15:04:05")
objectID := primitive.NewObjectID()
var fhirsuku = mongomaster.Tribe{
ResourceType: "Tribe",
ID: objectID,
}
fhirsuku.Identifier = []_struct.Identifier{
{
Use: "usual",
System: "",
Value: suku.IDSuku,
Type: _struct.CodeableConcept{
Coding: []_struct.Coding{
{
System: "",
Version: "",
Code: "idxsuku",
Display: "ID m_suku Simrs 3.0",
UserSelected: true,
},
},
Text: "ID m_suku Simrs 3.0",
},
Period: _struct.Period{
Start: "",
End: "",
},
Assigner: _struct.Reference{
Reference: "",
Display: "",
},
},
}
fhirsuku.Status = "active"
fhirsuku.Name = suku.NamaSuku
fhirsuku.Description = ""
fhirsuku.Period = _struct.Period{
Start: "",
End: "",
}
fhirsuku.CreatedAt = dateCreated
fhirsuku.UpdatedAt = dateCreated
err := mongoDB.Inserttribe(fhirsuku)
if err != nil {
log.Printf("Gagal migrasi data suku %s: %v", suku.IDSuku, err)
failedCount++
continue
}
migratedIDs = append(migratedIDs, objectID.Hex())
migratedCount++
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"message": "Migrasi data suku ke FHIR berhasil",
"total": len(datasuku),
"migrated": migratedCount,
"failed": failedCount,
"migrated_ids": migratedIDs,
"timestamp": time.Now().Format(time.RFC3339),
})
}