代码拉取完成,页面将自动刷新
package kk_executor
import (
"errors"
"gitee.com/cruvie/kk_go_kit/kk_minio"
"gitee.com/cruvie/kk_go_kit/kk_stage"
"gorm.io/gorm"
"log/slog"
)
// Executor 失败时执行回滚程序
func Executor(stage *kk_stage.Stage, do func() error, failBack func() error) error {
if do == nil {
return nil
}
doErr := do()
if doErr != nil {
slog.Info("Executor begin to roll back", kk_stage.NewLog(stage).Args()...)
if failBack == nil {
return doErr
}
failBackErr := failBack()
if failBackErr != nil {
slog.Error("Executor fail to roll back", kk_stage.NewLog(stage).Args()...)
return errors.Join(doErr, failBackErr)
}
slog.Info("Executor success to roll back", kk_stage.NewLog(stage).Args()...)
}
return nil
}
func DBTxExecutor(stage *kk_stage.Stage, transaction *gorm.DB, do func() error, failBack func() error) (err error) {
if do == nil {
return nil
}
err = Executor(stage, func() error {
{
err = do()
if err != nil {
return err
}
}
{
//提交事务
if err := transaction.Commit().Error; err != nil {
slog.Error("提交事务失败", kk_stage.NewLog(stage).Error(err).Args()...)
return err
}
}
return nil
}, func() error {
var errs error
{
if failBack != nil {
err := failBack()
errs = errors.Join(errs, err)
}
}
{
if err := transaction.Rollback().Error; err != nil {
slog.Error("回滚事务失败", kk_stage.NewLog(stage).Error(err).Args()...)
errs = errors.Join(errs, err)
} else {
slog.Info("回滚事务成功", kk_stage.NewLog(stage).Args()...)
}
}
return errs
})
return err
}
func DBMinIOExecutor(stage *kk_stage.Stage, transaction *gorm.DB, opObjects []kk_minio.OPObject, do func() error, failBack func() error) (err error) {
err = Executor(stage, func() error {
{
if do != nil {
err = do()
if err != nil {
return err
}
}
}
{
//upload opObjects
err = kk_minio.BatchOperator(stage, opObjects, kk_minio.UploadFileStream)
if err != nil {
return err
}
}
{
//最后提交事务
if err := transaction.Commit().Error; err != nil {
slog.Error("提交事务失败", kk_stage.NewLog(stage).Error(err).Args()...)
return err
}
}
return nil
}, func() error {
var errs error
{
if err := transaction.Rollback().Error; err != nil {
slog.Error("回滚事务失败", kk_stage.NewLog(stage).Error(err).Args()...)
errs = errors.Join(errs, err)
} else {
slog.Info("回滚事务成功", kk_stage.NewLog(stage).Args()...)
}
}
{
if failBack != nil {
err := failBack()
errs = errors.Join(errs, err)
}
}
{
//delete opObjects
err = kk_minio.BatchOperator(stage, opObjects, kk_minio.RemoveObject)
errs = errors.Join(errs, err)
err = kk_minio.BatchOperator(stage, opObjects, kk_minio.RemoveIncompleteObject)
errs = errors.Join(errs, err)
}
return errs
})
return err
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。