package database import ( "context" "fmt" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" ) func Transact(ctx context.Context, pool *pgxpool.Pool, fn func(pgx.Tx) error) error { tx, err := pool.BeginTx(ctx, pgx.TxOptions{}) if err != nil { return fmt.Errorf("begin transaction: %w", err) } defer func() { _ = tx.Rollback(context.Background()) }() if err := fn(tx); err != nil { return err } if err := tx.Commit(ctx); err != nil { return fmt.Errorf("commit transaction: %w", err) } return nil }