Files
mayfly-go/server/internal/sys/application/config.go

79 lines
2.2 KiB
Go
Raw Normal View History

package application
import (
"encoding/json"
"mayfly-go/internal/sys/domain/entity"
"mayfly-go/internal/sys/domain/repository"
"mayfly-go/pkg/base"
"mayfly-go/pkg/cache"
"mayfly-go/pkg/errorx"
"mayfly-go/pkg/logx"
"mayfly-go/pkg/model"
"mayfly-go/pkg/utils/jsonx"
2023-08-25 19:41:52 +08:00
"strings"
)
const SysConfigKeyPrefix = "mayfly:sys:config:"
type Config interface {
base.App[*entity.Config]
GetPageList(condition *entity.Config, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error)
Save(config *entity.Config) error
2023-07-20 20:34:05 +08:00
// GetConfig 获取指定key的配置信息, 不会返回nil, 若不存在则值都默认值即空字符串
GetConfig(key string) *entity.Config
}
2022-09-09 18:26:08 +08:00
func newConfigApp(configRepo repository.Config) Config {
configApp := new(configAppImpl)
configApp.Repo = configRepo
return configApp
// return &configAppImpl{base.AppImpl[*entity.Config, repository.Config]{Repo: configRepo}}
}
2022-09-09 18:26:08 +08:00
type configAppImpl struct {
base.AppImpl[*entity.Config, repository.Config]
}
func (a *configAppImpl) GetPageList(condition *entity.Config, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error) {
return a.GetRepo().GetPageList(condition, pageParam, toEntity)
}
func (a *configAppImpl) Save(config *entity.Config) error {
if config.Id == 0 {
if err := a.Insert(config); err != nil {
return err
}
} else {
2023-08-25 19:41:52 +08:00
oldConfig := a.GetConfig(config.Key)
if oldConfig.Permission != "all" && !strings.Contains(oldConfig.Permission, config.Modifier) {
return errorx.NewBiz("您无权修改该配置")
2023-08-25 19:41:52 +08:00
}
if err := a.UpdateById(config); err != nil {
return err
}
}
cache.Del(SysConfigKeyPrefix + config.Key)
return nil
}
func (a *configAppImpl) GetConfig(key string) *entity.Config {
config := &entity.Config{Key: key}
// 优先从缓存中获取
cacheStr := cache.GetStr(SysConfigKeyPrefix + key)
if cacheStr != "" {
json.Unmarshal([]byte(cacheStr), &config)
return config
}
if err := a.GetBy(config, "Id", "Key", "Value", "Permission"); err != nil {
logx.Warnf("不存在key = [%s] 的系统配置", key)
} else {
cache.SetStr(SysConfigKeyPrefix+key, jsonx.ToStr(config), -1)
}
return config
}