Files
MonkeyCode/backend/pkg/entx/tx.go
2025-06-25 15:56:22 +08:00

32 lines
591 B
Go

package entx
import (
"context"
"fmt"
"github.com/chaitin/MonkeyCode/backend/db"
)
func WithTx(ctx context.Context, client *db.Client, fn func(tx *db.Tx) error) error {
tx, err := client.Tx(ctx)
if err != nil {
return err
}
defer func() {
if v := recover(); v != nil {
tx.Rollback()
panic(v)
}
}()
if err := fn(tx); err != nil {
if rerr := tx.Rollback(); rerr != nil {
err = fmt.Errorf("%w: rolling back transaction: %v", err, rerr)
}
return err
}
if err := tx.Commit(); err != nil {
return fmt.Errorf("committing transaction: %w", err)
}
return nil
}