101 lines
2.1 KiB
Go
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
|
|
}
|