1 Star 0 Fork 0

Cruvie Kang / kk_go_kit

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
kk_executor.go 2.85 KB
一键复制 编辑 原始数据 按行查看 历史
cruvie 提交于 2024-05-19 17:26 . update
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
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/cruvie/kk_go_kit.git
git@gitee.com:cruvie/kk_go_kit.git
cruvie
kk_go_kit
kk_go_kit
e755676a3e52

搜索帮助

344bd9b3 5694891 D2dac590 5694891