Update payment
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type txKeyType struct{}
|
||||
|
||||
var txKey = txKeyType{}
|
||||
|
||||
// DBFromContext returns the transactional *gorm.DB from context if present; otherwise returns base.
|
||||
func DBFromContext(ctx context.Context, base *gorm.DB) *gorm.DB {
|
||||
if v := ctx.Value(txKey); v != nil {
|
||||
if tx, ok := v.(*gorm.DB); ok && tx != nil {
|
||||
return tx
|
||||
}
|
||||
}
|
||||
return base
|
||||
}
|
||||
|
||||
type TxManager struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewTxManager(db *gorm.DB) *TxManager { return &TxManager{db: db} }
|
||||
|
||||
// WithTransaction runs fn inside a DB transaction, injecting the *gorm.DB tx into ctx.
|
||||
func (m *TxManager) WithTransaction(ctx context.Context, fn func(ctx context.Context) error) error {
|
||||
return m.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
||||
ctxTx := context.WithValue(ctx, txKey, tx)
|
||||
return fn(ctxTx)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user