func Transaction(db *sql.DB, f func(*sql.Tx) error) error {
	tx, err := db.Begin()
	if err != nil {
		return errors.Wrap(err, "failed to begin transaction")
	}

	err = f(tx)
	if err != nil {
		return rollback(tx, err)
	}

	err = tx.Commit()
	if err == sql.ErrTxDone {
		err = nil // Ignore duplicate commits/rollbacks
	}
	return err
}
func Transaction(db *sql.DB, f func(*sql.Tx) error) error {
	tx, err := db.Begin()
	if err != nil {
		return errors.Wrap(err, "failed to begin transaction")
	}

	err = f(tx)
	if err != nil {
		return rollback(tx, err)
	}

	err = tx.Commit()
	if err == sql.ErrTxDone {
		err = nil 
	}
	return err
}
func Transaction ( db * sql . DB , f func ( * sql . Tx ) error ) error { tx , err := db . Begin ( ) if err != nil { return errors . Wrap ( err , " " ) } err = f ( tx ) if err != nil { return rollback ( tx , err ) } err = tx . Commit ( ) if err == sql . ErrTxDone { err = nil // Ignore duplicate commits/rollbacks } return err }
// Transaction executes the given function within a database transaction.
Transaction executes the given function within a database transaction .