688 lines
17 KiB
Go
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),
|
|
})
|
|
}
|