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

101 lines
2.1 KiB
Go

package subspecialist
import (
"bytes"
"encoding/json"
"log"
"net/http"
db "simrs-vx/pkg/dualtrx-helper"
pl "simrs-vx/pkg/logger"
es "simrs-vx/internal/domain/main-entities/subspecialist"
eds "simrs-vx/internal/domain/satu-entities/daftar-specialist"
esb "simrs-vx/internal/domain/sync-entities/subspecialist"
us "simrs-vx/internal/use-case/simgos-sync-use-case/new/subspecialist"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
)
func SeedSubspecialist(event *pl.Event, tx *db.Dualtx) error {
dspe := []eds.DaftarSpesialis{}
subspeMap := make(map[string]uint)
// Get Daftar Specialist
err := tx.Satu.Model(&eds.DaftarSpesialis{}).
Find(&dspe).Error
if err != nil {
log.Println("Error Querying DaftarSpecialist:", err)
return err
}
// Mapping To Subspecialist
var speData []es.CreateDto
for _, v := range dspe {
speData = append(speData, es.CreateDto{
Code: v.Kode,
Name: v.Spesialis,
})
subspeMap[v.Kode] = v.ID
}
dataSpe, err := CreateBulkSubSpecialist(es.CreateBulkDto{Value: speData})
if err != nil {
return err
}
// mapping link for subspecialist
var subspecliast []esb.SubspecialistLink
for _, v := range dataSpe {
subspecliast = append(subspecliast, esb.SubspecialistLink{
Simx_Id: uint(v.Id),
Simgos_Id: subspeMap[v.Code],
})
}
_, err = us.CreateBulkLinkData(subspecliast, event, tx.Sync)
if err != nil {
return err
}
return nil
}
func CreateBulkSubSpecialist(ins es.CreateBulkDto) ([]es.Subspecialist, error) {
var path = "subspecialist/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 []es.Subspecialist `json:"data"`
}
// getting response
var data MainApiResp
err = json.Unmarshal(resp, &data)
if err != nil {
return nil, err
}
return data.Data, nil
}