diff --git a/migrate/migrate.go b/migrate/migrate.go index 70510b6..e394eba 100644 --- a/migrate/migrate.go +++ b/migrate/migrate.go @@ -8,12 +8,19 @@ import ( ) // Menu 合并菜单 -func Menu(db *gorm.DB, model *models.Menu) (err error) { - if err = db.Where("name = ?", model.Name).First(model).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - err = db.Create(model).Error +func Menu(db *gorm.DB, datas ...*models.Menu) (err error) { + tx := db.Begin() + for _, model := range datas { + if err = tx.Where("name = ?", model.Name).First(model).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + if err = tx.Create(model).Error; err != nil { + tx.Rollback() + return err + } + } } } + err = tx.Commit().Error return } @@ -31,6 +38,7 @@ func Permission(db *gorm.DB, menuName string, permission string, label string) ( return } +// #2c7be5 // Default 合并初始化数据集 func Default(db *gorm.DB) (err error) { var ( diff --git a/pkg/dbcache/cache.go b/pkg/dbcache/cache.go index 731c813..e47e19d 100644 --- a/pkg/dbcache/cache.go +++ b/pkg/dbcache/cache.go @@ -84,7 +84,7 @@ func TryCache[T any](ctx context.Context, key string, f func(tx *gorm.DB) (T, er if opts.dependency == nil { return entry.Value, nil } - if dependValue, err = opts.dependency.GetValue(ctx, opts.db); err == nil { + if dependValue, err = opts.dependency.GetValue(ctx, opts.db); err == nil && dependValue != "" { hasDependValue = true if entry.CompareValue == dependValue { return entry.Value, nil @@ -98,7 +98,7 @@ func TryCache[T any](ctx context.Context, key string, f func(tx *gorm.DB) (T, er if val, err, _ = singleInstance.Do(key, func() (any, error) { if result, err = f(tx); err == nil { if !hasDependValue && opts.dependency != nil { - dependValue, err = opts.dependency.GetValue(ctx, tx) + dependValue, _ = opts.dependency.GetValue(ctx, tx) } opts.cache.Store(ctx, key, &cacheEntry[T]{ CompareValue: dependValue,