chore: opt settings code

This commit is contained in:
engigu
2025-12-21 10:23:25 +08:00
parent 432c57e862
commit c06030fe27
28 changed files with 535 additions and 187 deletions
+19 -20
View File
@@ -1,6 +1,7 @@
package services
import (
"baihu/internal/cache"
"baihu/internal/constant"
"baihu/internal/database"
"baihu/internal/models"
@@ -17,26 +18,23 @@ func (s *SettingsService) InitSettings() error {
for section, keys := range constant.DefaultSettings {
for key, value := range keys {
var count int64
database.DB.Model(&models.Setting{}).
Where("section = ? AND key = ?", section, key).
Count(&count)
database.DB.Model(&models.Setting{}).Where("section = ? AND key = ?", section, key).Count(&count)
if count == 0 {
setting := &models.Setting{
Section: section,
Key: key,
Value: value,
}
if err := database.DB.Create(setting).Error; err != nil {
if err := database.DB.Create(&models.Setting{Section: section, Key: key, Value: value}).Error; err != nil {
return err
}
}
}
}
cache.LoadSiteCache()
return nil
}
// Get 获取单个设置
func (s *SettingsService) Get(section, key string) string {
if section == constant.SectionSite {
return cache.GetSiteCache(key)
}
var setting models.Setting
if err := database.DB.Where("section = ? AND key = ?", section, key).First(&setting).Error; err != nil {
if def, ok := constant.DefaultSettings[section][key]; ok {
@@ -50,29 +48,27 @@ func (s *SettingsService) Get(section, key string) string {
// Set 设置单个值
func (s *SettingsService) Set(section, key, value string) error {
var setting models.Setting
result := database.DB.Where("section = ? AND key = ?", section, key).First(&setting)
if result.Error != nil {
setting = models.Setting{Section: section, Key: key, Value: value}
return database.DB.Create(&setting).Error
if database.DB.Where("section = ? AND key = ?", section, key).First(&setting).Error != nil {
return database.DB.Create(&models.Setting{Section: section, Key: key, Value: value}).Error
}
return database.DB.Model(&setting).Update("value", value).Error
}
// GetSection 获取整个 section 的设置
func (s *SettingsService) GetSection(section string) map[string]string {
var settings []models.Setting
database.DB.Where("section = ?", section).Find(&settings)
if section == constant.SectionSite {
return cache.GetSiteCacheAll()
}
result := make(map[string]string)
// 先填充默认值
if defaults, ok := constant.DefaultSettings[section]; ok {
for k, v := range defaults {
result[k] = v
}
}
// 覆盖数据库值
for _, s := range settings {
result[s.Key] = s.Value
var settings []models.Setting
database.DB.Where("section = ?", section).Find(&settings)
for _, setting := range settings {
result[setting.Key] = setting.Value
}
return result
}
@@ -84,5 +80,8 @@ func (s *SettingsService) SetSection(section string, values map[string]string) e
return err
}
}
if section == constant.SectionSite {
cache.SetSiteCacheBatch(values)
}
return nil
}