Files
simrsx-be/pkg/dualtrx-helper/dualtrx-helper.go
T
2025-12-11 18:35:43 +07:00

72 lines
1016 B
Go

package dualtrx_helper
import (
dg "github.com/karincake/apem/db-gorm-pg"
"gorm.io/gorm"
)
type Dualtx struct {
Sync *gorm.DB
Simgos *gorm.DB
Satu *gorm.DB
}
func NewDualtx() *Dualtx {
simgosTx := dg.IS["simrs"].Begin()
simgosTx.Exec(`SET LOCAL simx.sync_source = 'new'`)
return &Dualtx{
Sync: dg.I.Begin(),
Simgos: simgosTx,
}
}
func NewTx() *Dualtx {
return &Dualtx{
Sync: dg.I,
Simgos: dg.IS["simrs"],
Satu: dg.IS["satu"],
}
}
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
}