package utils

import (
	"database/sql"
)

type InTransaction func(tx *sql.Tx) error

func DoInTransaction(fn InTransaction, db *sql.DB) error {
	tx, err := db.Begin()
	if err != nil {
		return err
	}
	err = fn(tx)
	if err != nil {
		xerr := tx.Rollback()
		if xerr != nil {
			return xerr
		}
		return err
	}
	return tx.Commit()
}
