50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package service
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
"yitao/model"
|
||
|
||
"encoding/json"
|
||
)
|
||
|
||
type CommonService struct{}
|
||
|
||
type TypeSetting map[string]string
|
||
type TypeSettings map[string]TypeSetting
|
||
|
||
func (c *CommonService) GetSetting(key string) TypeSetting {
|
||
settings_json := model.RedisRemember("nexus_settings_in_nexus", 600, func() interface{} {
|
||
j, _ := json.Marshal(c.GetSettingsFromDB())
|
||
return j
|
||
})
|
||
m := make(TypeSettings)
|
||
json.Unmarshal([]byte(settings_json), &m)
|
||
return m[key]
|
||
}
|
||
|
||
func (c *CommonService) GetSettingsFromDB() TypeSettings {
|
||
// settings 表中的两个字段:name 和 value,把他们读取出来再组装成一个 map
|
||
var results []struct {
|
||
Name string
|
||
Value string
|
||
}
|
||
model.DB.Table("settings").Select("name", "value").Find(&results)
|
||
// 从 results 中取出 name 和 value 组装成一个 map
|
||
// 其中 name 的格式是 xxx.yyy ,那么就是一个嵌套的 map
|
||
settings := make(TypeSettings)
|
||
for _, result := range results {
|
||
keys := strings.Split(result.Name, ".")
|
||
if len(keys) == 1 {
|
||
settings[keys[0]] = TypeSetting{keys[0]: result.Value}
|
||
} else {
|
||
if _, ok := settings[keys[0]]; !ok {
|
||
settings[keys[0]] = TypeSetting{}
|
||
}
|
||
settings[keys[0]][keys[1]] = result.Value
|
||
}
|
||
}
|
||
fmt.Printf("settings: %v\n", settings)
|
||
return settings
|
||
}
|