finish sync soapi early-medic

This commit is contained in:
vanilia
2025-12-03 10:19:44 +07:00
parent 11955df8ec
commit 132ce5f5ed
16 changed files with 646 additions and 192 deletions

No files matched your search

@@ -8,18 +8,19 @@ import (
db "simrs-vx/pkg/dualtrx-helper"
e "simrs-vx/internal/domain/main-entities/division"
esimgos "simrs-vx/internal/domain/simgos-entities/m-unit"
esync "simrs-vx/internal/domain/sync-entities/division"
e "simrs-vx/internal/domain/main-entities/soapi"
elog "simrs-vx/internal/domain/sync-entities/log"
esync "simrs-vx/internal/domain/sync-entities/soapi"
ue "simrs-vx/internal/use-case/simgos-sync-use-case/new/encounter"
)
const source = "soapi"
func Create(input e.CreateDto) (*d.Data, error) {
func Create(input e.Soapi) (*d.Data, error) {
var (
sgData *esimgos.MUnit
syncLink *esync.DivisionLink
syncLink *esync.SoapiLink
err error
)
@@ -31,15 +32,39 @@ func Create(input e.CreateDto) (*d.Data, error) {
// Start log
pl.SetLogInfo(&event, input, "started", "create")
// get encounter Link
eLink, err := ue.ReadDetailLinkData(*input.Encounter_Id, &event)
if err != nil {
return nil, err
}
// get Tpendaftaran
tPendaftaran, err := ue.ReadTPendaftaranDetailData(eLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
err = db.WithDualTx(func(tx *db.Dualtx) error {
// STEP 1: Insert to simgos
sgData, err = CreateSimgosData(input, &event, tx.Simgos)
// STEP 1: Insert to TDiagnosaDanTerapi
tDiagTherapy, err := CreateTDiagnosaDanTerapi(input, tPendaftaran, &event, tx.Simgos)
if err != nil {
return err
}
// STEP 2: Insert to Link
syncLink, err = CreateLinkData(*input.Id, sgData.KodeUnit, &event, tx.Sync)
// STEP 2: Insert to TICD
_, err = CreateTIcd(input, tPendaftaran, &event, tx.Simgos)
if err != nil {
return err
}
// STEP 3: Insert to TICD-CM
_, err = CreateTIcdCm(input, tPendaftaran, &event, tx.Simgos)
if err != nil {
return err
}
// STEP 4: Insert to Link
syncLink, err = CreateLinkData(input.Id, tDiagTherapy.Idxterapi, &event, tx.Sync)
if err != nil {
return err
}
@@ -99,7 +124,7 @@ func CreateSimxLog(input elog.SimxLogDto) (*d.Data, error) {
}, nil
}
func Update(input e.UpdateDto) (*d.Data, error) {
func Update(input e.Soapi) (*d.Data, error) {
event := pl.Event{
Feature: "Update",
Source: source,
@@ -108,16 +133,59 @@ func Update(input e.UpdateDto) (*d.Data, error) {
// Start log
pl.SetLogInfo(&event, input, "started", "update")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(*input.Id, &event)
// Get Soapi Link
sLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// Get TDiagnosadanTerapi
tDiagTherapy, err := ReadDetailTDiagnosaDanTerapi(sLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
// Get Encounter Link
eLink, err := ue.ReadDetailLinkData(*input.Encounter_Id, &event)
if err != nil {
return nil, err
}
// Get TPendaftaran
tPendaftaran, err := ue.ReadTPendaftaranDetailData(eLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
tx := db.NewTx()
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
// Step 2: Update Simgos
if err = UpdateSimgosData(input, syncLink, &event, tx); err != nil {
// SET LOCAL
if err = tx.Exec(`SET LOCAL simx.sync_source = 'new'`).Error; err != nil {
return err
}
// Step 1: Update TDiagnosaDanTerapi
if err = UpdateTDiagnosaDanTerapi(input, tDiagTherapy, &event, tx); err != nil {
return err
}
// STEP 2: Delete TIcd
if err = HardDeleteTIcd(tDiagTherapy.Idxdaftar, &event, tx); err != nil {
return err
}
// STEP 3: Delete TIcdCm
if err = HardDeleteTIcdCm(tDiagTherapy.Idxdaftar, &event, tx); err != nil {
return err
}
// STEP 4: Insert TIcd
if _, err = CreateTIcd(input, tPendaftaran, &event, tx); err != nil {
return err
}
// STEP 5: Insert TIcd-cm
if _, err = CreateTIcdCm(input, tPendaftaran, &event, tx); err != nil {
return err
}
@@ -146,22 +214,31 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
// Start log
pl.SetLogInfo(&event, input, "started", "delete")
// STEP 1: Get Link
syncLink, err := ReadDetailLinkData(*input.Id, &event)
// Get Soapi Link
syncLink, err := ReadDetailLinkData(input.Id, &event)
if err != nil {
return nil, err
}
// STEP 2: Get Simgos
sgData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
// Get TDiagnosa&Terapi
tDiagTh, err := ReadDetailTDiagnosaDanTerapi(syncLink.Simgos_Id, &event)
if err != nil {
return nil, err
}
err = db.WithDualTx(func(tx *db.Dualtx) error {
// STEP 3: Delete Simgos
err = HardDeleteSimgosData(sgData, &event, tx.Simgos)
if err != nil {
// STEP 1: Delete TDiagnosa&Terapi Simgos
if err = HardDeleteTDiagnosaDanTerapi(tDiagTh, &event, tx.Simgos); err != nil {
return err
}
// STEP 2: Delete TIcd
if err = HardDeleteTIcd(tDiagTh.Idxdaftar, &event, tx.Simgos); err != nil {
return err
}
// STEP 3: Delete TIcdCm
if err = HardDeleteTIcdCm(tDiagTh.Idxdaftar, &event, tx.Simgos); err != nil {
return err
}
@@ -178,7 +255,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
if err != nil {
if isLinkDeleted {
go func() {
_, _ = CreateLinkData(uint(*input.Id), sgData.KodeUnit, &event)
_, _ = CreateLinkData(input.Id, tDiagTh.Idxterapi, &event)
}()
}
return nil, err