Files
likedream/internal/common/db/tx.go
T
2025-11-10 14:46:01 +08:00

35 lines
645 B
Go

package db
import (
"context"
"likedream-goframe/internal/ent"
"likedream-goframe/internal/utils"
"entgo.io/ent/dialect/sql"
"github.com/samber/oops"
)
func WithTx(ctx context.Context, f func(ctx context.Context, tx *ent.Tx), opts *sql.TxOptions) error {
tx, err := Global.BeginTx(ctx, opts)
if err != nil {
return oops.WithContext(ctx).Wrap(err)
}
err = utils.Catch(func() {
f(ctx, tx)
})
if err != nil {
if rbErr := tx.Rollback(); rbErr != nil {
return oops.
With("rollback", false).
WithContext(ctx).
Join(rbErr, err)
}
return oops.WithContext(ctx).With("rollback", true).Wrap(err)
}
return nil
}