zwpanel/service/lib/cmn/systemSetting/systemSetting.go
2023-11-08 21:53:07 +08:00

100 lines
2.3 KiB
Go

package systemSetting
import (
"encoding/json"
"errors"
"sun-panel/lib/cache"
"sun-panel/models"
"gorm.io/gorm"
)
const (
SYSTEM_APPLICATION = "system_application"
SYSTEM_EMAIL = "system_email"
DISCLAIMER = "disclaimer" // 免责声明 储存类型:字符串
WEB_ABOUT_DESCRIPTION = "web_about_description" // 关于的描述信息
)
type SystemSettingCache struct {
Cache cache.Cacher[interface{}]
}
type Email struct {
Host string `json:"host" binding:"required"`
Port int `json:"port" binding:"required"`
Mail string `json:"mail" binding:"required,email"`
Password string `json:"password" binding:"required"`
}
type Register struct {
EmailSuffix string `json:"emailSuffix"` // 注册邮箱后缀
OpenRegister bool `json:"openRegister"` // 开放注册
}
type Login struct {
LoginCaptcha bool `json:"loginCaptcha"` // 登录验证码
}
type ApplicationSetting struct {
Register
Login
WebSiteUrl string `json:"webSiteUrl"` // 站点地址
}
var (
ErrorNoExists = errors.New("no exists")
)
// 系统配置启用缓存功能
func (s *SystemSettingCache) GetValueString(configName string) (result string, err error) {
if v, ok := s.Cache.Get(configName); ok {
if v1, ok1 := v.(string); ok1 {
// fmt.Println("读取缓存")
return v1, nil
}
}
mSetting := models.SystemSetting{}
result, err = mSetting.Get(configName)
if err == gorm.ErrRecordNotFound {
err = ErrorNoExists
}
// 查询出来,缓存起来
s.Cache.SetDefault(configName, result)
return
}
// value 需为指针
func (s *SystemSettingCache) GetValueByInterface(configName string, value interface{}) error {
if v, ok := s.Cache.Get(configName); ok {
// fmt.Println("缓存")
if s, sok := v.(string); sok {
if err := json.Unmarshal([]byte(s), value); err != nil {
return err
}
return nil
}
}
mSetting := models.SystemSetting{}
result, err := mSetting.Get(configName)
if err == gorm.ErrRecordNotFound {
err = ErrorNoExists
return err
}
err = json.Unmarshal([]byte(result), value)
if err != nil {
return err
}
s.Cache.SetDefault(configName, result)
return nil
}
func (s *SystemSettingCache) Set(configName string, configValue interface{}) error {
s.Cache.Delete(configName)
mSetting := models.SystemSetting{}
err := mSetting.Set(configName, configValue)
return err
}