zwpanel/service/models/SystemSetting.go
2023-11-08 21:53:07 +08:00

69 lines
1.6 KiB
Go

package models
import (
"encoding/json"
"gorm.io/gorm"
)
// 系统设置
type SystemSetting struct {
ID uint `gorm:"primaryKey"`
ConfigName string `gorm:"type:varchar(50)"`
ConfigValue string `gorm:"type:text"`
}
func (m *SystemSetting) Get(configName string) (result string, err error) {
var res SystemSetting
if err := Db.Model(m).Select("ConfigValue").First(&res, "config_name=?", configName).Error; err != nil {
return result, err
}
result = res.ConfigValue
return result, nil
}
func (m *SystemSetting) GetValueByInterface(configName string, structValue interface{}) error {
result, err := m.Get(configName)
if err != nil {
return err
}
err = json.Unmarshal([]byte(result), structValue)
if err != nil {
return err
}
return nil
}
// 暂时仅支持结构体和字符串
func (m *SystemSetting) Set(configName string, configValue interface{}) error {
findRes := SystemSetting{}
db := Db.Model(m).First(&findRes, "config_name=?", configName)
if err := db.Error; err != nil && err != gorm.ErrRecordNotFound {
return err
}
value := ""
if s, ok := configValue.(string); !ok {
if jsonStr, err := json.Marshal(configValue); err != nil {
value = ""
} else {
value = string(jsonStr)
}
} else {
value = s
}
if db.RowsAffected == 0 {
// 添加
if err := Db.Model(m).Create(&SystemSetting{ConfigName: configName, ConfigValue: value}).Error; err != nil {
return err
}
} else {
// 修改
if err := Db.Model(m).Where("id=?", findRes.ID).Update("config_value", value).Error; err != nil {
return err
}
}
return nil
}