ongoing seed subspecialist

This commit is contained in:
vanilia
2025-12-11 18:35:43 +07:00
parent 1527884766
commit a892e5ee43
33 changed files with 773 additions and 53 deletions
@@ -14,6 +14,10 @@ type CreateDto struct {
EncounterClass_Code ere.EncounterClassCode `json:"encounterClass_code" validate:"maxLength=20"`
}
type CreateBulkDto struct {
Value []CreateDto `json:"value"`
}
type ReadListDto struct {
FilterDto
Includes string `json:"includes"`
@@ -44,6 +44,10 @@ type DeleteDto struct {
Code *string `json:"code"`
}
type CreateBulkDto struct {
Value []CreateDto `json:"value"`
}
type MetaDto struct {
PageNumber int `json:"page_number"`
PageSize int `json:"page_size"`
@@ -43,6 +43,10 @@ type DeleteDto struct {
Code *string `json:"code"`
}
type CreateBulkDto struct {
Value []CreateDto `json:"value"`
}
type MetaDto struct {
PageNumber int `json:"page_number"`
PageSize int `json:"page_size"`
@@ -0,0 +1,12 @@
package daftar_specialist
type DaftarSpesialis struct {
ID uint `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
Kode string `json:"kode" gorm:"column:Kode"`
Spesialis string `json:"spesialis" gorm:"column:Spesialis"`
IdGroupLocationSimgos *string `json:"id_group_location_simgos" gorm:"column:Id_group_location_simgos"`
}
func (DaftarSpesialis) TableName() string {
return "daftar_spesialis"
}
@@ -0,0 +1,24 @@
package m_ruang
type MRuang struct {
No uint `json:"no" gorm:"column:no;primaryKey;autoIncrement"`
Nama string `json:"nama" gorm:"column:nama"`
Kelas string `json:"kelas" gorm:"column:kelas"`
IdxRuang string `json:"idx_ruang" gorm:"column:idx_ruang"`
Kelompok string `json:"kelompok" gorm:"column:kelompok"`
Ruang *string `json:"ruang" gorm:"column:ruang"`
KdUnit int `json:"kdunit" gorm:"column:kdunit"`
JumlahTT int `json:"jumlah_tt" gorm:"column:jumlah_tt"`
KetRuang *string `json:"ket_ruang" gorm:"column:ket_ruang"`
Fasilitas *string `json:"fasilitas" gorm:"column:fasilitas"`
Keterangan *string `json:"keterangan" gorm:"column:keterangan"`
SubSistem string `json:"subsistem" gorm:"column:subsistem"`
StAktif int16 `json:"st_aktif" gorm:"column:st_aktif"`
KodeRuang *string `json:"kode_ruang" gorm:"column:kode_ruang"`
IsPartial *string `json:"is_partial" gorm:"column:is_partial"`
}
// Nama tabel (opsional jika nama struct ≠ nama tabel)
func (MRuang) TableName() string {
return "m_ruang"
}
+9
View File
@@ -0,0 +1,9 @@
package simgos_db
import (
dg "github.com/karincake/apem/db-gorm-pg"
)
func SetInstance() {
I = dg.IS["satu"]
}
+5
View File
@@ -0,0 +1,5 @@
package simgos_db
import "gorm.io/gorm"
var I *gorm.DB
@@ -71,3 +71,12 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
res, err := u.Delete(dto)
rw.DataResponse(w, res, err)
}
func (obj myBase) CreateBulk(w http.ResponseWriter, r *http.Request) {
dto := e.CreateBulkDto{}
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
res, err := u.CreateBulk(dto)
rw.DataResponse(w, res, err)
}
@@ -367,12 +367,33 @@ func SetRoutes() http.Handler {
/******************** sources ********************/
hc.RegCrudByCode(r, "/v1/division", division.O)
hc.RegCrudByCode(r, "/v1/division-position", divisionposition.O)
hc.RegCrudByCode(r, "/v1/installation", installation.O)
hk.GroupRoutes("/v1/installation", r, hk.MapHandlerFunc{
"GET /": installation.O.GetList,
"GET /{id}": installation.O.GetDetail,
"POST /": installation.O.Create,
"PATCH /{id}": installation.O.Update,
"DELETE /{id}": installation.O.Delete,
"POST /bulk": installation.O.CreateBulk,
})
hc.RegCrudByCode(r, "/v1/unit", unit.O)
hc.RegCrudByCode(r, "/v1/installation-position", installationposition.O)
hc.RegCrudByCode(r, "/v1/unit-position", unitposition.O)
hc.RegCrudByCode(r, "/v1/specialist", specialist.O)
hc.RegCrudByCode(r, "/v1/subspecialist", subspecialist.O)
hk.GroupRoutes("/v1/specialist", r, hk.MapHandlerFunc{
"GET /": specialist.O.GetList,
"GET /{id}": specialist.O.GetDetail,
"POST /": specialist.O.Create,
"PATCH /{id}": specialist.O.Update,
"DELETE /{id}": specialist.O.Delete,
"POST /bulk": specialist.O.CreateBulk,
})
hk.GroupRoutes("/v1/subspecialist", r, hk.MapHandlerFunc{
"GET /": subspecialist.O.GetList,
"GET /{id}": subspecialist.O.GetDetail,
"POST /": subspecialist.O.Create,
"PATCH /{id}": subspecialist.O.Update,
"DELETE /{id}": subspecialist.O.Delete,
"POST /bulk": subspecialist.O.CreateBulk,
})
hc.RegCrudByCode(r, "/v1/specialist-position", specialistposition.O)
hc.RegCrudByCode(r, "/v1/subspecialist-position", subspecialistposition.O)
hc.RegCrudByCode(r, "/v1/infra", infra.O)
@@ -71,3 +71,12 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
res, err := u.Delete(dto)
rw.DataResponse(w, res, err)
}
func (obj myBase) CreateBulk(w http.ResponseWriter, r *http.Request) {
dto := e.CreateBulkDto{}
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
res, err := u.CreateBulk(dto)
rw.DataResponse(w, res, err)
}
@@ -71,3 +71,12 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
res, err := u.Delete(dto)
rw.DataResponse(w, res, err)
}
func (obj myBase) CreateBulk(w http.ResponseWriter, r *http.Request) {
dto := e.CreateBulkDto{}
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
return
}
res, err := u.CreateBulk(dto)
rw.DataResponse(w, res, err)
}
@@ -5,6 +5,7 @@ import (
/******************** infra ********************/
gs "simrs-vx/internal/infra/gorm-setting"
satudb "simrs-vx/internal/infra/satu-db"
simgosdb "simrs-vx/internal/infra/simgos-db"
sync "simrs-vx/internal/infra/sync-cfg"
@@ -44,6 +45,7 @@ func SetRoutes() http.Handler {
a.RegisterExtCall(lh.Populate)
a.RegisterExtCall(sync.SetConfig)
a.RegisterExtCall(simgosdb.SetInstance)
a.RegisterExtCall(satudb.SetInstance)
r := http.NewServeMux()
@@ -241,6 +241,40 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
}
func CreateBulk(input e.CreateBulkDto) (*d.Data, error) {
var data []e.Installation
event := pl.Event{
Feature: "Create",
Source: source,
}
// Start log
pl.SetLogInfo(&event, input, "started", "create")
err := dg.I.Transaction(func(tx *gorm.DB) error {
if resData, err := CreateBulkData(input.Value, &event, tx); err != nil {
return err
} else {
data = *resData
}
return nil
})
if err != nil {
return nil, err
}
pl.SetLogInfo(&event, nil, "complete")
return &d.Data{
Meta: d.II{
"source": source,
"structure": "single-data",
"status": "created",
},
Data: e.ToResponseList(data),
}, nil
}
func runLogMiddleware(err error, input any, mwRunner *middlewareRunner) error {
var errMsg string
inputLog := esync.SimxLogDto{
@@ -21,3 +21,15 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Installation) {
data.Name = inputSrc.Name
data.EncounterClass_Code = inputSrc.EncounterClass_Code
}
func setBulkData(input []e.CreateDto) (data []e.Installation) {
for _, i := range input {
data = append(data, e.Installation{
Code: *i.Code,
Name: i.Name,
EncounterClass_Code: i.EncounterClass_Code,
})
}
return data
}
@@ -1,6 +1,7 @@
package installation
import (
"fmt"
e "simrs-vx/internal/domain/main-entities/installation"
plh "simrs-vx/pkg/lib-helper"
@@ -147,3 +148,26 @@ func DeleteData(data *e.Installation, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, nil, "complete")
return nil
}
func CreateBulkData(input []e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*[]e.Installation, error) {
pl.SetLogInfo(event, nil, "started", "DBBulkCreate")
data := setBulkData(input)
var tx *gorm.DB
if len(dbx) > 0 {
tx = dbx[0]
} else {
tx = dg.I
}
result := tx.Create(&data)
if err := result.Error; err != nil {
return nil, plh.HandleCreateError(input, event, err)
}
fmt.Println("Inserted:", result.RowsAffected)
pl.SetLogInfo(event, nil, "complete")
return &data, nil
}
@@ -295,3 +295,37 @@ func runLogMiddleware(err error, input any, mwRunner *middlewareRunner) error {
return nil
}
func CreateBulk(input e.CreateBulkDto) (*d.Data, error) {
var data []e.Specialist
event := pl.Event{
Feature: "CreateBulk",
Source: source,
}
// Start log
pl.SetLogInfo(&event, input, "started", "create")
err := dg.I.Transaction(func(tx *gorm.DB) error {
if resData, err := CreateBulkData(input.Value, &event, tx); err != nil {
return err
} else {
data = *resData
}
return nil
})
if err != nil {
return nil, err
}
pl.SetLogInfo(&event, nil, "complete")
return &d.Data{
Meta: d.II{
"source": source,
"structure": "single-data",
"status": "created",
},
Data: e.ToResponseList(data),
}, nil
}
@@ -21,3 +21,14 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Specialist) {
data.Name = inputSrc.Name
data.Unit_Code = inputSrc.Unit_Code
}
func setBulkData(input []e.CreateDto) (data []e.Specialist) {
for _, i := range input {
data = append(data, e.Specialist{
Code: i.Code,
Name: i.Name,
})
}
return data
}
@@ -1,6 +1,7 @@
package specialist
import (
"fmt"
e "simrs-vx/internal/domain/main-entities/specialist"
plh "simrs-vx/pkg/lib-helper"
@@ -147,3 +148,26 @@ func DeleteData(data *e.Specialist, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, nil, "complete")
return nil
}
func CreateBulkData(input []e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*[]e.Specialist, error) {
pl.SetLogInfo(event, nil, "started", "DBBulkCreate")
data := setBulkData(input)
var tx *gorm.DB
if len(dbx) > 0 {
tx = dbx[0]
} else {
tx = dg.I
}
result := tx.Create(&data)
if err := result.Error; err != nil {
return nil, plh.HandleCreateError(input, event, err)
}
fmt.Println("Inserted:", result.RowsAffected)
pl.SetLogInfo(event, nil, "complete")
return &data, nil
}
@@ -293,3 +293,37 @@ func runLogMiddleware(err error, input any, mwRunner *middlewareRunner) error {
return nil
}
func CreateBulk(input e.CreateBulkDto) (*d.Data, error) {
var data []e.Subspecialist
event := pl.Event{
Feature: "CreateBulk",
Source: source,
}
// Start log
pl.SetLogInfo(&event, input, "started", "create")
err := dg.I.Transaction(func(tx *gorm.DB) error {
if resData, err := CreateBulkData(input.Value, &event, tx); err != nil {
return err
} else {
data = *resData
}
return nil
})
if err != nil {
return nil, err
}
pl.SetLogInfo(&event, nil, "complete")
return &d.Data{
Meta: d.II{
"source": source,
"structure": "single-data",
"status": "created",
},
Data: e.ToResponseList(data),
}, nil
}
@@ -6,6 +6,7 @@ package subspecialist
import (
e "simrs-vx/internal/domain/main-entities/subspecialist"
"simrs-vx/internal/domain/main-entities/subspecialist/base"
)
func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Subspecialist) {
@@ -21,3 +22,16 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Subspecialist) {
data.Name = inputSrc.Name
data.Specialist_Code = inputSrc.Specialist_Code
}
func setBulkData(input []e.CreateDto) (data []e.Subspecialist) {
for _, i := range input {
data = append(data, e.Subspecialist{
Basic: base.Basic{
Code: i.Code,
Name: i.Name,
},
})
}
return data
}
@@ -1,6 +1,7 @@
package subspecialist
import (
"fmt"
e "simrs-vx/internal/domain/main-entities/subspecialist"
plh "simrs-vx/pkg/lib-helper"
@@ -147,3 +148,26 @@ func DeleteData(data *e.Subspecialist, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, nil, "complete")
return nil
}
func CreateBulkData(input []e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*[]e.Subspecialist, error) {
pl.SetLogInfo(event, nil, "started", "DBBulkCreate")
data := setBulkData(input)
var tx *gorm.DB
if len(dbx) > 0 {
tx = dbx[0]
} else {
tx = dg.I
}
result := tx.Create(&data)
if err := result.Error; err != nil {
return nil, plh.HandleCreateError(input, event, err)
}
fmt.Println("Inserted:", result.RowsAffected)
pl.SetLogInfo(event, nil, "complete")
return &data, nil
}
@@ -11,6 +11,7 @@ import (
esimgos "simrs-vx/internal/domain/simgos-entities/m-instalasi"
esync "simrs-vx/internal/domain/sync-entities/installation"
esyncLog "simrs-vx/internal/domain/sync-entities/log"
"strconv"
)
func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MInstalasi) {
@@ -56,3 +57,14 @@ func setDataSimxLink(simxId, simgosId uint) (data esync.InstallationLink) {
data.Simgos_Id = simgosId
return
}
func setBulkDataSimxLink(input []e.Installation) (data []esync.InstallationLink) {
for _, i := range input {
kode, _ := strconv.Atoi(i.Code)
data = append(data, esync.InstallationLink{
Simx_Id: uint(i.Id),
Simgos_Id: uint(kode),
})
}
return
}
@@ -1,6 +1,7 @@
package installation
import (
"fmt"
plh "simrs-vx/pkg/lib-helper"
pl "simrs-vx/pkg/logger"
pu "simrs-vx/pkg/use-case-helper"
@@ -212,3 +213,25 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB)
pl.SetLogInfo(event, nil, "complete")
return nil
}
func CreateBulkLinkData(input []e.Installation, event *pl.Event, dbx ...*gorm.DB) (*[]esync.InstallationLink, error) {
pl.SetLogInfo(event, nil, "started", "DBCreate")
data := setBulkDataSimxLink(input)
var tx *gorm.DB
if len(dbx) > 0 {
tx = dbx[0]
} else {
tx = dg.I
}
result := tx.Create(&data)
if err := result.Error; err != nil {
return nil, plh.HandleCreateError(input, event, err)
}
fmt.Println("Inserted Link:", result.RowsAffected)
pl.SetLogInfo(event, nil, "complete")
return &data, nil
}
@@ -7,6 +7,7 @@ package specialist
import (
"encoding/json"
erc "simrs-vx/internal/domain/references/common"
"strconv"
e "simrs-vx/internal/domain/main-entities/specialist"
esimgos "simrs-vx/internal/domain/simgos-entities/m-polihfis"
@@ -58,3 +59,14 @@ func setDataSimxLink(simxId, simgosId uint) (data esync.SpecialistLink) {
data.Simgos_Id = simgosId
return
}
func setBulkDataSimxLink(input []e.Specialist) (data []esync.SpecialistLink) {
for _, i := range input {
kode, _ := strconv.Atoi(i.Code)
data = append(data, esync.SpecialistLink{
Simx_Id: uint(i.Id),
Simgos_Id: uint(kode),
})
}
return
}
@@ -1,6 +1,7 @@
package specialist
import (
"fmt"
plh "simrs-vx/pkg/lib-helper"
pl "simrs-vx/pkg/logger"
pu "simrs-vx/pkg/use-case-helper"
@@ -189,3 +190,25 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB)
pl.SetLogInfo(event, nil, "complete")
return nil
}
func CreateBulkLinkData(input []e.Specialist, event *pl.Event, dbx ...*gorm.DB) (*[]esync.SpecialistLink, error) {
pl.SetLogInfo(event, nil, "started", "DBCreate")
data := setBulkDataSimxLink(input)
var tx *gorm.DB
if len(dbx) > 0 {
tx = dbx[0]
} else {
tx = dg.I
}
result := tx.Create(&data)
if err := result.Error; err != nil {
return nil, plh.HandleCreateError(input, event, err)
}
fmt.Println("Inserted Link:", result.RowsAffected)
pl.SetLogInfo(event, nil, "complete")
return &data, nil
}
@@ -9,7 +9,7 @@ import (
erc "simrs-vx/internal/domain/references/common"
//esimgos "simrs-vx/internal/domain/simgos-entities/specialist"
esyncLog "simrs-vx/internal/domain/sync-entities/log"
esync "simrs-vx/internal/domain/sync-entities/specialist"
esync "simrs-vx/internal/domain/sync-entities/subspecialist"
)
//func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPolihfis) {
@@ -30,7 +30,7 @@ import (
// return
//}
func setDataSimxLog(input *esyncLog.SimxLogDto) (data esync.SpecialistSimxLog) {
func setDataSimxLog(input *esyncLog.SimxLogDto) (data esync.SubspecialistSimxLog) {
// encode to JSON
jsonData, _ := json.MarshalIndent(input.Payload, "", " ")
jsonString := string(jsonData)
@@ -52,7 +52,7 @@ func setDataSimxLog(input *esyncLog.SimxLogDto) (data esync.SpecialistSimxLog) {
return
}
func setDataSimxLink(simxId, simgosId uint) (data esync.SpecialistLink) {
func setDataSimxLink(simxId, simgosId uint) (data esync.SubspecialistLink) {
data.Simx_Id = simxId
data.Simgos_Id = simgosId
return
@@ -1,6 +1,7 @@
package subspecialist
import (
"fmt"
plh "simrs-vx/pkg/lib-helper"
pl "simrs-vx/pkg/logger"
pu "simrs-vx/pkg/use-case-helper"
@@ -9,9 +10,8 @@ import (
dg "github.com/karincake/apem/db-gorm-pg"
"gorm.io/gorm"
//esimgos "simrs-vx/internal/domain/simgos-entities/specialist"
esynclog "simrs-vx/internal/domain/sync-entities/log"
esync "simrs-vx/internal/domain/sync-entities/specialist"
esync "simrs-vx/internal/domain/sync-entities/subspecialist"
)
var now = time.Now()
@@ -106,7 +106,7 @@ var now = time.Now()
// return nil
//}
func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*esync.SpecialistLink, error) {
func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*esync.SubspecialistLink, error) {
pl.SetLogInfo(event, nil, "started", "DBCreate")
data := setDataSimxLink(simxId, simgosId)
@@ -125,9 +125,9 @@ func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*e
return &data, nil
}
func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.SpecialistLink, error) {
func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.SubspecialistLink, error) {
pl.SetLogInfo(event, simxId, "started", "DBReadDetail")
data := esync.SpecialistLink{}
data := esync.SubspecialistLink{}
var tx = dg.I
@@ -143,7 +143,7 @@ func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.SpecialistLink,
return &data, nil
}
func DeleteLinkData(data *esync.SpecialistLink, event *pl.Event, dbx ...*gorm.DB) error {
func DeleteLinkData(data *esync.SubspecialistLink, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, data, "started", "DBDelete")
var tx *gorm.DB
@@ -185,3 +185,24 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB)
pl.SetLogInfo(event, nil, "complete")
return nil
}
func CreateBulkLinkData(data []esync.SubspecialistLink, event *pl.Event, dbx ...*gorm.DB) (*[]esync.SubspecialistLink, error) {
pl.SetLogInfo(event, nil, "started", "DBCreate")
var tx *gorm.DB
if len(dbx) > 0 {
tx = dbx[0]
} else {
tx = dg.I
}
result := tx.Create(&data)
if err := result.Error; err != nil {
return nil, plh.HandleCreateError(data, event, err)
}
fmt.Println("Inserted Link:", result.RowsAffected)
pl.SetLogInfo(event, nil, "complete")
return &data, nil
}
@@ -15,6 +15,7 @@ import (
type Dto struct {
LoginNip []string `json:"loginNip"`
Instalasi_Code string `json:"instalasi_code"`
SeedTableName string `json:"seedTableName"`
}
func Send(method string, endpoint string, body *bytes.Buffer, username string) ([]byte, error) {
@@ -0,0 +1,92 @@
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
}
@@ -2,9 +2,6 @@ package seeder
import (
"log"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/doctor"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/nurse"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/regular"
db "simrs-vx/pkg/dualtrx-helper"
pl "simrs-vx/pkg/logger"
@@ -14,6 +11,13 @@ import (
el "simrs-vx/internal/domain/simgos-entities/m-login"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/doctor"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/installation"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/nurse"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/regular"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/specialist"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/subspecialist"
)
const source = "seeder"
@@ -33,52 +37,69 @@ func SeedToSimx(input seeder.Dto) (*d.Data, error) {
kddokter, kdperawat []uint
)
// Get M_login
err := tx.Simgos.Model(&el.MLogin{}).
Select(`DISTINCT ON (nip) m_login.*`).
Where(`"nip" IN (?)`, input.LoginNip).
Find(&mlogin).Error
if err != nil {
log.Println("Error Querying Mlogin:", err)
return nil, err
}
switch input.SeedTableName {
case "installation":
if err := installation.SeedInstallation(&event, tx); err != nil {
return nil, err
}
case "specialist":
if err := specialist.SeedSpecialist(&event, tx); err != nil {
return nil, err
}
case "subspecialist":
if err := subspecialist.SeedSubspecialist(&event, tx); err != nil {
return nil, err
}
// SET data
if len(mlogin) > 0 {
for _, l := range mlogin {
if l.KdDokter != 0 {
kddokter = append(kddokter, l.KdDokter)
continue
default:
// Get M_login
err := tx.Simgos.Model(&el.MLogin{}).
Select(`DISTINCT ON (nip) m_login.*`).
Where(`"nip" IN (?)`, input.LoginNip).
Find(&mlogin).Error
if err != nil {
log.Println("Error Querying Mlogin:", err)
return nil, err
}
// SET data
if len(mlogin) > 0 {
for _, l := range mlogin {
if l.KdDokter != 0 {
kddokter = append(kddokter, l.KdDokter)
continue
}
if l.KdPerawat != 0 {
kdperawat = append(kdperawat, l.KdPerawat)
continue
}
regLogin = append(regLogin, l)
}
}
if l.KdPerawat != 0 {
kdperawat = append(kdperawat, l.KdPerawat)
continue
// Seed based on role
if len(kddokter) > 0 {
err = doctor.SeedDoctor(kddokter, &event, tx)
if err != nil {
return nil, err
}
regLogin = append(regLogin, l)
}
}
// Seed based on role
if len(kddokter) > 0 {
err = doctor.SeedDoctor(kddokter, &event, tx)
if err != nil {
return nil, err
if len(kdperawat) > 0 {
err = nurse.SeedNurse(kdperawat, &event, tx)
if err != nil {
return nil, err
}
}
}
if len(kdperawat) > 0 {
err = nurse.SeedNurse(kdperawat, &event, tx)
if err != nil {
return nil, err
}
}
if len(regLogin) > 0 {
err = regular.SeedRegular(regLogin, input.Instalasi_Code)
if err != nil {
return nil, err
if len(regLogin) > 0 {
err = regular.SeedRegular(regLogin, input.Instalasi_Code)
if err != nil {
return nil, err
}
}
}
@@ -0,0 +1,90 @@
package specialist
import (
"bytes"
"encoding/json"
"log"
"net/http"
db "simrs-vx/pkg/dualtrx-helper"
pl "simrs-vx/pkg/logger"
"strconv"
es "simrs-vx/internal/domain/main-entities/specialist"
er "simrs-vx/internal/domain/simgos-entities/m-ruang"
us "simrs-vx/internal/use-case/simgos-sync-use-case/new/specialist"
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
)
func SeedSpecialist(event *pl.Event, tx *db.Dualtx) error {
ruang := []er.MRuang{}
// Get M_Ruang
err := tx.Simgos.Model(&er.MRuang{}).
Find(&ruang).Error
if err != nil {
log.Println("Error Querying MRuang:", err)
return err
}
// Mapping To Installation
var speData []es.CreateDto
for _, v := range ruang {
codeString := strconv.Itoa(int(v.No))
speData = append(speData, es.CreateDto{
Code: codeString,
Name: v.Nama,
})
}
dataSpe, err := CreateBulkSpecialist(es.CreateBulkDto{Value: speData})
if err != nil {
return err
}
_, err = us.CreateBulkLinkData(dataSpe, event, tx.Sync)
if err != nil {
return err
}
return nil
}
func CreateBulkSpecialist(ins es.CreateBulkDto) ([]es.Specialist, error) {
var path = "specialist/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.Specialist `json:"data"`
}
// getting response
var data MainApiResp
err = json.Unmarshal(resp, &data)
if err != nil {
return nil, err
}
return data.Data, nil
}
@@ -0,0 +1,100 @@
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
}