package gormutil

import (
	"github.com/jinzhu/gorm"
)

type InTransaction func(tx *gorm.DB) error

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