1 Star 0 Fork 0

lipore / plume

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
trx.go 1.19 KB
一键复制 编辑 原始数据 按行查看 历史
Ricky Gu 提交于 2023-11-08 18:02 . refactor: transaction
package db_gorm
import (
"context"
"errors"
"gitee.com/lipore/plume/trx"
"gorm.io/gorm"
)
type GormTransaction struct {
context.Context
conn *gorm.DB
}
type GormTxManager struct {
conn *gorm.DB
}
func NewTxManager(conn *gorm.DB) trx.Manager {
return &GormTxManager{
conn: conn,
}
}
func (t *GormTxManager) Start(ctx context.Context) (trx.Context, error) {
d := t.conn.WithContext(ctx).Begin()
tx := &GormTransaction{
Context: ctx,
conn: d,
}
return tx, nil
}
func (t *GormTransaction) Commit() error {
err := t.conn.Commit().Error
if err != nil {
return err
}
return nil
}
func (t *GormTransaction) Rollback() {
t.conn.Rollback()
}
func (t *GormTransaction) RollbackTo(name string) {
t.conn.RollbackTo(name)
}
func (t *GormTransaction) SavePoint(name string) {
t.conn.SavePoint(name)
}
func LoadTx(ctx trx.Context) (*gorm.DB, error) {
if tx, ok := ctx.(*GormTransaction); ok {
return tx.conn, nil
} else {
return nil, errors.New("not supported transaction type")
}
}
func WithTx(ctx context.Context, fn func(tx *gorm.DB) error) error {
return trx.Tx(ctx, func(ctx trx.Context) error {
tx, err := LoadTx(ctx)
if err != nil {
return err
}
return fn(tx)
})
}
1
https://gitee.com/lipore/plume.git
git@gitee.com:lipore/plume.git
lipore
plume
plume
v1.7.6

搜索帮助