Files
simrsx-be/internal/use-case/simgos-sync-use-case/seeder/installation/seeder.go
T
2025-12-11 18:35:43 +07:00

93 lines
2.0 KiB
Go

package installation
import (
"bytes"
"encoding/json"
"log"
"net/http"
ere "simrs-vx/internal/domain/references/encounter"
db "simrs-vx/pkg/dualtrx-helper"
pl "simrs-vx/pkg/logger"
"strconv"
ei "simrs-vx/internal/domain/main-entities/installation"
eu "simrs-vx/internal/domain/simgos-entities/m-unit"
ui "simrs-vx/internal/use-case/simgos-sync-use-case/new/installation"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
)
func SeedInstallation(event *pl.Event, tx *db.Dualtx) error {
unit := []eu.MUnit{}
// Get M_Unit
err := tx.Simgos.Model(&eu.MUnit{}).
Find(&unit).Error
if err != nil {
log.Println("Error Querying MUnit:", err)
return err
}
// Mapping To Installation
var installationData []ei.CreateDto
for _, v := range unit {
codeString := strconv.Itoa(int(v.KodeUnit))
installationData = append(installationData, ei.CreateDto{
Name: v.NamaUnit,
EncounterClass_Code: ere.ECAmbulatory,
Code: &codeString,
})
}
dataInstallation, err := CreateBulkInstallation(ei.CreateBulkDto{Value: installationData})
if err != nil {
return err
}
_, err = ui.CreateBulkLinkData(dataInstallation, event, tx.Sync)
if err != nil {
return err
}
return nil
}
func CreateBulkInstallation(ins ei.CreateBulkDto) ([]ei.Installation, error) {
var path = "installation/bulk"
// create request body
jsonData, err := json.Marshal(ins)
if err != nil {
return nil, err
}
reqBody := bytes.NewBuffer(jsonData)
// send data to main-api
resp, err := seeder.Send(http.MethodPost, path, reqBody, "von")
if err != nil {
return nil, err
}
type MetaData struct {
Source string `json:"source"`
Status string `json:"status"`
Structure string `json:"structure"`
}
type MainApiResp struct {
Meta MetaData `json:"meta"`
Data []ei.Installation `json:"data"`
}
// getting response
var data MainApiResp
err = json.Unmarshal(resp, &data)
if err != nil {
return nil, err
}
return data.Data, nil
}