update dual trx
This commit is contained in:
@@ -3,21 +3,24 @@ package division
|
||||
import (
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
"gorm.io/gorm"
|
||||
|
||||
dualtx "simrs-vx/pkg/dualtrx-helper"
|
||||
|
||||
e "simrs-vx/internal/domain/main-entities/division"
|
||||
esimgos "simrs-vx/internal/domain/simgos-entities/division"
|
||||
esync "simrs-vx/internal/domain/sync-entities/log"
|
||||
esync "simrs-vx/internal/domain/sync-entities/division"
|
||||
elog "simrs-vx/internal/domain/sync-entities/log"
|
||||
)
|
||||
|
||||
const source = "division"
|
||||
|
||||
func Create(input e.CreateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MUnit
|
||||
syncLink *esync.DivisionLink
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
@@ -28,31 +31,26 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err := CreateSimgosData(input, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err = CreateSimgosData(input, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err = CreateLinkData(*input.Id, sgData.KodeUnit, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err := CreateLinkData(*input.Id, sgData.KodeUnit, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 4: Rollback Partial
|
||||
go func() {
|
||||
_ = DeleteLinkData(syncLink, &event)
|
||||
}()
|
||||
if syncLink != nil {
|
||||
go func() { _ = DeleteLinkData(syncLink, &event) }()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -67,7 +65,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
func CreateSimxLog(input elog.SimxLogDto) (*d.Data, error) {
|
||||
event := pl.Event{
|
||||
Feature: "Create",
|
||||
Source: source,
|
||||
@@ -76,14 +74,13 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
// InsertSimxLog
|
||||
tx := dualtx.NewTx()
|
||||
err := tx.Sync.Transaction(func(tx *gorm.DB) error {
|
||||
// Insert to Log
|
||||
if err := CreateLogData(input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -103,11 +100,6 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Update",
|
||||
Source: source,
|
||||
@@ -116,23 +108,21 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "update")
|
||||
|
||||
// STEP 1: Get Installation Link
|
||||
// STEP 1: Get Link
|
||||
syncLink, err := ReadDetailLinkData(*input.Id, &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 2: Update Simgos
|
||||
err = UpdateSimgosData(input, syncLink, &event, txSimgos)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tx := dualtx.NewTx()
|
||||
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
|
||||
// Step 2: Update Simgos
|
||||
if err = UpdateSimgosData(input, syncLink, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
@@ -146,12 +136,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MUnit
|
||||
err error
|
||||
)
|
||||
var isLinkDeleted bool
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Delete",
|
||||
@@ -161,43 +146,41 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "delete")
|
||||
|
||||
// STEP 1: Get Installation Link
|
||||
// STEP 1: Get 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)
|
||||
sgData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Delete M_Unit Simgos
|
||||
err = HardDeleteSimgosData(sgData, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 3: Delete Simgos
|
||||
err = HardDeleteSimgosData(sgData, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Delete Link
|
||||
err = DeleteLinkData(syncLink, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
isLinkDeleted = true
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Delete Installation Link
|
||||
err = DeleteLinkData(syncLink, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 5: Rollback Partial
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.KodeUnit, &event)
|
||||
}()
|
||||
if isLinkDeleted {
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.KodeUnit, &event)
|
||||
}()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -1,24 +1,27 @@
|
||||
package installation
|
||||
|
||||
import (
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
dualtx "simrs-vx/pkg/dualtrx-helper"
|
||||
|
||||
e "simrs-vx/internal/domain/main-entities/installation"
|
||||
esimgos "simrs-vx/internal/domain/simgos-entities/installation"
|
||||
esync "simrs-vx/internal/domain/sync-entities/log"
|
||||
esync "simrs-vx/internal/domain/sync-entities/installation"
|
||||
elog "simrs-vx/internal/domain/sync-entities/log"
|
||||
)
|
||||
|
||||
const source = "installation"
|
||||
|
||||
func Create(input e.CreateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MInstalasi
|
||||
syncLink *esync.InstallationLink
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
@@ -29,31 +32,26 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err := CreateSimgosData(input, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err = CreateSimgosData(input, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err = CreateLinkData(*input.Id, sgData.No_Instalasi, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err := CreateLinkData(*input.Id, sgData.No_Instalasi, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 4: Rollback Partial
|
||||
go func() {
|
||||
_ = DeleteLinkData(syncLink, &event)
|
||||
}()
|
||||
if syncLink != nil {
|
||||
go func() { _ = DeleteLinkData(syncLink, &event) }()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -68,7 +66,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
func CreateSimxLog(input elog.SimxLogDto) (*d.Data, error) {
|
||||
event := pl.Event{
|
||||
Feature: "Create",
|
||||
Source: source,
|
||||
@@ -77,14 +75,13 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
// InsertSimxLog
|
||||
tx := dualtx.NewTx()
|
||||
err := tx.Sync.Transaction(func(tx *gorm.DB) error {
|
||||
// Insert to Log
|
||||
if err := CreateLogData(input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -104,11 +101,6 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Update",
|
||||
Source: source,
|
||||
@@ -117,23 +109,21 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "update")
|
||||
|
||||
// STEP 1: Get Installation Link
|
||||
// STEP 1: Get Link
|
||||
syncLink, err := ReadDetailLinkData(*input.Id, &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 2: Update Simgos
|
||||
err = UpdateSimgosData(input, syncLink, &event, txSimgos)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tx := dualtx.NewTx()
|
||||
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
|
||||
// Step 2: Update Simgos
|
||||
if err = UpdateSimgosData(input, syncLink, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
@@ -147,12 +137,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MInstalasi
|
||||
err error
|
||||
)
|
||||
var isLinkDeleted bool
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Delete",
|
||||
@@ -162,43 +147,42 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "delete")
|
||||
|
||||
// STEP 1: Get Installation Link
|
||||
// STEP 1: Get 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)
|
||||
sgData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Delete M_Instalation Simgos
|
||||
err = SoftDeleteSimgosData(sgData, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 3: Delete Simgos
|
||||
err = SoftDeleteSimgosData(sgData, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Delete Link
|
||||
err = DeleteLinkData(syncLink, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
isLinkDeleted = true
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if isLinkDeleted {
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.No_Instalasi, &event)
|
||||
}()
|
||||
}
|
||||
|
||||
// STEP 4: Delete Installation Link
|
||||
err = DeleteLinkData(syncLink, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 5: Rollback Partial
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.No_Instalasi, &event)
|
||||
}()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -3,21 +3,24 @@ package specialist
|
||||
import (
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
"gorm.io/gorm"
|
||||
|
||||
dualtx "simrs-vx/pkg/dualtrx-helper"
|
||||
|
||||
e "simrs-vx/internal/domain/main-entities/specialist"
|
||||
esimgos "simrs-vx/internal/domain/simgos-entities/specialist"
|
||||
esync "simrs-vx/internal/domain/sync-entities/log"
|
||||
elog "simrs-vx/internal/domain/sync-entities/log"
|
||||
esync "simrs-vx/internal/domain/sync-entities/specialist"
|
||||
)
|
||||
|
||||
const source = "specialist"
|
||||
|
||||
func Create(input e.CreateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MPolihfis
|
||||
syncLink *esync.SpecialistLink
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
@@ -28,34 +31,28 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err := CreateSimgosData(input, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err = CreateSimgosData(input, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err = CreateLinkData(*input.Id, sgData.Id, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
if syncLink != nil {
|
||||
go func() { _ = DeleteLinkData(syncLink, &event) }()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err := CreateLinkData(*input.Id, sgData.Id, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 4: Rollback Partial
|
||||
go func() {
|
||||
_ = DeleteLinkData(syncLink, &event)
|
||||
}()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return &d.Data{
|
||||
@@ -67,7 +64,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
func CreateSimxLog(input elog.SimxLogDto) (*d.Data, error) {
|
||||
event := pl.Event{
|
||||
Feature: "Create",
|
||||
Source: source,
|
||||
@@ -76,14 +73,13 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
// InsertSimxLog
|
||||
tx := dualtx.NewTx()
|
||||
err := tx.Sync.Transaction(func(tx *gorm.DB) error {
|
||||
// Insert to Log
|
||||
if err := CreateLogData(input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -103,11 +99,6 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Update",
|
||||
Source: source,
|
||||
@@ -122,17 +113,16 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 2: Update Simgos
|
||||
err = UpdateSimgosData(input, syncLink, &event, txSimgos)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tx := dualtx.NewTx()
|
||||
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
|
||||
// Step 2: Update Simgos
|
||||
err = UpdateSimgosData(input, syncLink, &event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
@@ -146,12 +136,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MPolihfis
|
||||
err error
|
||||
)
|
||||
var isLinkDeleted bool
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Delete",
|
||||
@@ -161,43 +146,41 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "delete")
|
||||
|
||||
// STEP 1: Get Installation Link
|
||||
// STEP 1: Get 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)
|
||||
sgData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Delete M_Unit Simgos
|
||||
err = HardDeleteSimgosData(sgData, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 3: Delete Simgos
|
||||
err = HardDeleteSimgosData(sgData, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Delete Link
|
||||
err = DeleteLinkData(syncLink, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
isLinkDeleted = true
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Delete Installation Link
|
||||
err = DeleteLinkData(syncLink, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 5: Rollback Partial
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.Id, &event)
|
||||
}()
|
||||
if isLinkDeleted {
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.Id, &event)
|
||||
}()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
package subspecialist
|
||||
|
||||
import (
|
||||
dualtx "simrs-vx/pkg/dualtrx-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
"gorm.io/gorm"
|
||||
|
||||
e "simrs-vx/internal/domain/main-entities/subspecialist"
|
||||
//esimgos "simrs-vx/internal/domain/simgos-entities/specialist"
|
||||
esync "simrs-vx/internal/domain/sync-entities/log"
|
||||
elog "simrs-vx/internal/domain/sync-entities/log"
|
||||
//esync "simrs-vx/internal/domain/sync-entities/subspecialist"
|
||||
)
|
||||
|
||||
const source = "subspecialist"
|
||||
|
||||
func Create(input e.CreateDto) (*d.Data, error) {
|
||||
//var (
|
||||
// txSync = dg.I.Begin()
|
||||
// txSimgos = dg.IS["simrs"].Begin()
|
||||
// sgData *esimgos.MUnit
|
||||
// syncLink *esync.SubspecialistLink
|
||||
// err error
|
||||
//)
|
||||
|
||||
event := pl.Event{
|
||||
@@ -28,31 +30,26 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
//// STEP 1: Insert to simgos
|
||||
//sgData, err := CreateSimgosData(input, &event, txSimgos)
|
||||
//err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// // STEP 1: Insert to simgos
|
||||
// sgData, err = CreateSimgosData(input, &event, tx.Simgos)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// // STEP 2: Insert to Link
|
||||
// syncLink, err = CreateLinkData(*input.Id, sgData.KodeUnit, &event, tx.Sync)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// return nil
|
||||
//})
|
||||
//
|
||||
//if err != nil {
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//// STEP 2: Insert to Link
|
||||
//syncLink, err := CreateLinkData(*input.Id, sgData.Id, &event, txSync)
|
||||
//if err != nil {
|
||||
// txSimgos.Rollback()
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//// STEP 3: Commit two trx
|
||||
//if err = txSync.Commit().Error; err != nil {
|
||||
// txSync.Rollback()
|
||||
// txSimgos.Rollback()
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//if err = txSimgos.Commit().Error; err != nil {
|
||||
// // STEP 4: Rollback Partial
|
||||
// go func() {
|
||||
// _ = DeleteLinkData(syncLink, &event)
|
||||
// }()
|
||||
// if syncLink != nil {
|
||||
// go func() { _ = DeleteLinkData(syncLink, &event) }()
|
||||
// }
|
||||
// return nil, err
|
||||
//}
|
||||
|
||||
@@ -67,7 +64,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
func CreateSimxLog(input elog.SimxLogDto) (*d.Data, error) {
|
||||
event := pl.Event{
|
||||
Feature: "Create",
|
||||
Source: source,
|
||||
@@ -76,8 +73,9 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
// InsertSimxLog
|
||||
tx := dualtx.NewTx()
|
||||
err := tx.Sync.Transaction(func(tx *gorm.DB) error {
|
||||
// Insert to Log
|
||||
if err := CreateLogData(input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -103,11 +101,6 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
//var (
|
||||
// txSimgos = dg.IS["simrs"].Begin()
|
||||
// err error
|
||||
//)
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Update",
|
||||
Source: source,
|
||||
@@ -116,23 +109,21 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "update")
|
||||
|
||||
//// STEP 1: Get Installation Link
|
||||
//// STEP 1: Get Link
|
||||
//syncLink, err := ReadDetailLinkData(*input.Id, &event)
|
||||
//if err != nil {
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//// Step 2: Update Simgos
|
||||
//err = UpdateSimgosData(input, syncLink, &event, txSimgos)
|
||||
//if err != nil {
|
||||
// return nil, err
|
||||
//}
|
||||
//tx := dualtx.NewTx()
|
||||
//err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
|
||||
// // Step 2: Update Simgos
|
||||
// if err = UpdateSimgosData(input, syncLink, &event, tx); err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
//// STEP 4: Commit two trx
|
||||
//if err = txSimgos.Commit().Error; err != nil {
|
||||
// txSimgos.Rollback()
|
||||
// return nil, err
|
||||
//}
|
||||
// return nil
|
||||
//})
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
@@ -146,12 +137,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
//var (
|
||||
// txSync = dg.I.Begin()
|
||||
// txSimgos = dg.IS["simrs"].Begin()
|
||||
// sgData *esimgos.MPolihfis
|
||||
// err error
|
||||
//)
|
||||
//var isLinkDeleted bool
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Delete",
|
||||
@@ -161,43 +147,41 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "delete")
|
||||
|
||||
//// STEP 1: Get Installation Link
|
||||
//// STEP 1: Get 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)
|
||||
//sgData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
|
||||
//if err != nil {
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//// STEP 3: Delete M_Unit Simgos
|
||||
//err = HardDeleteSimgosData(sgData, &event, txSimgos)
|
||||
//err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// // STEP 3: Delete Simgos
|
||||
// err = HardDeleteSimgosData(sgData, &event, tx.Simgos)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// // STEP 4: Delete Link
|
||||
// err = DeleteLinkData(syncLink, &event, tx.Sync)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// isLinkDeleted = true
|
||||
// return nil
|
||||
//})
|
||||
//
|
||||
//if err != nil {
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//// STEP 4: Delete Installation Link
|
||||
//err = DeleteLinkData(syncLink, &event, txSync)
|
||||
//if err != nil {
|
||||
// txSimgos.Rollback()
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//// STEP 4: Commit two trx
|
||||
//if err = txSync.Commit().Error; err != nil {
|
||||
// txSync.Rollback()
|
||||
// txSimgos.Rollback()
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//if err = txSimgos.Commit().Error; err != nil {
|
||||
// // STEP 5: Rollback Partial
|
||||
// go func() {
|
||||
// _, _ = CreateLinkData(uint(*input.Id), sgData.Id, &event)
|
||||
// }()
|
||||
// if isLinkDeleted {
|
||||
// go func() {
|
||||
// _, _ = CreateLinkData(uint(*input.Id), sgData.KodeUnit, &event)
|
||||
// }()
|
||||
// }
|
||||
// return nil, err
|
||||
//}
|
||||
|
||||
|
||||
@@ -3,21 +3,24 @@ package unit
|
||||
import (
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
"gorm.io/gorm"
|
||||
|
||||
dualtx "simrs-vx/pkg/dualtrx-helper"
|
||||
|
||||
e "simrs-vx/internal/domain/main-entities/unit"
|
||||
esimgos "simrs-vx/internal/domain/simgos-entities/unit"
|
||||
esync "simrs-vx/internal/domain/sync-entities/log"
|
||||
elog "simrs-vx/internal/domain/sync-entities/log"
|
||||
esync "simrs-vx/internal/domain/sync-entities/unit"
|
||||
)
|
||||
|
||||
const source = "unit"
|
||||
|
||||
func Create(input e.CreateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MPloy
|
||||
syncLink *esync.UnitLink
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
@@ -28,31 +31,26 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err := CreateSimgosData(input, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 1: Insert to simgos
|
||||
sgData, err = CreateSimgosData(input, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err = CreateLinkData(*input.Id, sgData.Kode, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 2: Insert to Link
|
||||
syncLink, err := CreateLinkData(*input.Id, sgData.Kode, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 4: Rollback Partial
|
||||
go func() {
|
||||
_ = DeleteLinkData(syncLink, &event)
|
||||
}()
|
||||
if syncLink != nil {
|
||||
go func() { _ = DeleteLinkData(syncLink, &event) }()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -67,7 +65,7 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
func CreateSimxLog(input elog.SimxLogDto) (*d.Data, error) {
|
||||
event := pl.Event{
|
||||
Feature: "Create",
|
||||
Source: source,
|
||||
@@ -76,14 +74,13 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
// InsertSimxLog
|
||||
tx := dualtx.NewTx()
|
||||
err := tx.Sync.Transaction(func(tx *gorm.DB) error {
|
||||
// Insert to Log
|
||||
if err := CreateLogData(input, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -103,11 +100,6 @@ func CreateSimxLog(input esync.SimxLogDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
var (
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
err error
|
||||
)
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Update",
|
||||
Source: source,
|
||||
@@ -122,17 +114,16 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 2: Update Simgos
|
||||
err = UpdateSimgosData(input, syncLink, &event, txSimgos)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tx := dualtx.NewTx()
|
||||
err = tx.Simgos.Transaction(func(tx *gorm.DB) error {
|
||||
// Step 2: Update Simgos
|
||||
err = UpdateSimgosData(input, syncLink, &event, tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
@@ -146,12 +137,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
var (
|
||||
txSync = dg.I.Begin()
|
||||
txSimgos = dg.IS["simrs"].Begin()
|
||||
sgData *esimgos.MPloy
|
||||
err error
|
||||
)
|
||||
var isLinkDeleted bool
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Delete",
|
||||
@@ -168,36 +154,34 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
// STEP 2: Get Simgos
|
||||
sgData, err = ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
|
||||
sgData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 3: Delete M_Poly Simgos
|
||||
err = HardDeleteSimgosData(sgData, &event, txSimgos)
|
||||
err = dualtx.WithDualTx(func(tx *dualtx.Dualtx) error {
|
||||
// STEP 3: Delete M_Poly Simgos
|
||||
err = HardDeleteSimgosData(sgData, &event, tx.Simgos)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// STEP 4: Delete Installation Link
|
||||
err = DeleteLinkData(syncLink, &event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
isLinkDeleted = true
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Delete Installation Link
|
||||
err = DeleteLinkData(syncLink, &event, txSync)
|
||||
if err != nil {
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// STEP 4: Commit two trx
|
||||
if err = txSync.Commit().Error; err != nil {
|
||||
txSync.Rollback()
|
||||
txSimgos.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = txSimgos.Commit().Error; err != nil {
|
||||
// STEP 5: Rollback Partial
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.Kode, &event)
|
||||
}()
|
||||
if isLinkDeleted {
|
||||
go func() {
|
||||
_, _ = CreateLinkData(uint(*input.Id), sgData.Kode, &event)
|
||||
}()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package dualtrx_helper
|
||||
|
||||
import (
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Dualtx struct {
|
||||
Sync *gorm.DB
|
||||
Simgos *gorm.DB
|
||||
}
|
||||
|
||||
func NewDualtx() *Dualtx {
|
||||
return &Dualtx{
|
||||
Sync: dg.I.Begin(),
|
||||
Simgos: dg.IS["simrs"].Begin(),
|
||||
}
|
||||
}
|
||||
|
||||
func NewTx() *Dualtx {
|
||||
return &Dualtx{
|
||||
Sync: dg.I,
|
||||
Simgos: dg.IS["simrs"],
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Dualtx) Commit() error {
|
||||
if err := t.Sync.Commit().Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := t.Simgos.Commit().Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *Dualtx) Rollback() {
|
||||
t.Sync.Rollback()
|
||||
t.Simgos.Rollback()
|
||||
}
|
||||
|
||||
type DualTxFunc func(tx *Dualtx) error
|
||||
|
||||
func WithDualTx(fn DualTxFunc) error {
|
||||
var (
|
||||
tx = NewDualtx()
|
||||
err error
|
||||
)
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
if err = fn(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = tx.Commit(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user