148 lines
3.3 KiB
Go
148 lines
3.3 KiB
Go
package doctor
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
|
|
pl "simrs-vx/pkg/logger"
|
|
"strconv"
|
|
|
|
db "simrs-vx/pkg/dualtrx-helper"
|
|
|
|
erg "simrs-vx/internal/domain/references/organization"
|
|
|
|
eed "simrs-vx/internal/domain/main-entities/doctor"
|
|
epr "simrs-vx/internal/domain/main-entities/person"
|
|
es "simrs-vx/internal/domain/main-entities/user"
|
|
|
|
ud "simrs-vx/internal/use-case/simgos-sync-use-case/new/doctor"
|
|
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
|
|
)
|
|
|
|
type user struct {
|
|
Kddokter uint `gorm:"column:kddokter"`
|
|
Kdpoly uint `gorm:"column:kdpoly"`
|
|
NIP string `gorm:"column:nip"`
|
|
NamaPegawai string `gorm:"column:nama_pegawai"`
|
|
}
|
|
|
|
func SeedDoctor(kddoc []uint, event *pl.Event, tx *db.Dualtx) error {
|
|
|
|
log.Println("=== START SeedDoctor ===")
|
|
|
|
var users []user
|
|
|
|
log.Println("Querying SIMGOS doctors...")
|
|
|
|
err := tx.Simgos.
|
|
Table("m_dokter").
|
|
Select(`
|
|
DISTINCT ON (l.nip)
|
|
m_dokter.kddokter as kddokter,
|
|
m_dokter.kdpoly as kdpoly,
|
|
l.nip as nip,
|
|
l.nama_pegawai as nama_pegawai
|
|
`).
|
|
Joins(`LEFT JOIN m_login l ON l.kddokter = m_dokter.kddokter`).
|
|
Where(`m_dokter.kddokter IN (?)`, kddoc).
|
|
Order(`l.nip`).
|
|
Scan(&users).Error
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Printf("Found %d doctors to seed\n", len(users))
|
|
|
|
// mapping
|
|
for i, d := range users {
|
|
log.Printf("[%d/%d] Processing doctor KdDokter=%d ...", i+1, len(users), d.Kddokter)
|
|
|
|
kddokter := strconv.Itoa(int(d.Kddokter))
|
|
//kdpoly := strconv.Itoa(int(d.MDokter.Kdpoly))
|
|
nik := seeder.GenerateDummyNIK("F")
|
|
|
|
doctorsimx := es.CreateDto{
|
|
Name: d.NIP,
|
|
Password: "1234",
|
|
ContractPosition_Code: erg.CSCEmp,
|
|
Code: &kddokter,
|
|
Person: &epr.UpdateDto{
|
|
CreateDto: epr.CreateDto{
|
|
Name: d.NamaPegawai,
|
|
ResidentIdentityNumber: &nik,
|
|
},
|
|
},
|
|
Employee: &es.EmployeUpdateDto{
|
|
Position_Code: erg.EPCDoc,
|
|
},
|
|
}
|
|
|
|
log.Printf("[%d] Creating User for NIP=%s ...", i+1, d.NIP)
|
|
|
|
// create user
|
|
userData, err := seeder.CreateUser(doctorsimx)
|
|
if err != nil {
|
|
log.Println("Error createUser:", err)
|
|
return err
|
|
}
|
|
|
|
log.Printf("[%d] User created: ID=%d", i+1, userData.Id)
|
|
|
|
log.Printf("[%d] Fetching doctor with code=%s ...", i+1, kddokter)
|
|
|
|
// get doctor
|
|
dataDoctor, err := getDoctors(kddokter)
|
|
if err != nil {
|
|
log.Println("Error getDoctors:", err)
|
|
return err
|
|
}
|
|
|
|
doc := *dataDoctor
|
|
ddoc := doc[0]
|
|
|
|
log.Printf("[%d] Linking doctor %d to %s ...", i+1, ddoc.Id, kddokter)
|
|
if _, err = ud.CreateLinkData(ddoc.Id, d.Kddokter, event); err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Printf("[%d] Link created successfully.", i+1)
|
|
}
|
|
|
|
log.Println("=== FINISH SeedDoctor ===")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
func getDoctors(code string) (*[]eed.Doctor, error) {
|
|
path := fmt.Sprintf("doctor?code=%s", code)
|
|
|
|
resp, err := seeder.Send(http.MethodGet, path, nil, "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 []eed.Doctor `json:"data"`
|
|
}
|
|
|
|
// getting response
|
|
var data MainApiResp
|
|
err = json.Unmarshal(resp, &data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &data.Data, nil
|
|
}
|