feat: add settings pages
This commit is contained in:
@@ -24,19 +24,24 @@ func NewInitService(settingsService *SettingsService, userService *UserService)
|
||||
|
||||
// Initialize 执行初始化,如果已初始化则跳过
|
||||
func (s *InitService) Initialize() {
|
||||
if s.IsInitialized() {
|
||||
logger.Info("系统已初始化,跳过")
|
||||
return
|
||||
}
|
||||
//if s.IsInitialized() {
|
||||
// logger.Info("系统已初始化,跳过")
|
||||
// return
|
||||
//}
|
||||
|
||||
logger.Info("开始初始化系统...")
|
||||
|
||||
// 创建管理员账号
|
||||
s.createAdminUser()
|
||||
|
||||
// 标记为已初始化
|
||||
s.settingsService.Set(InitSection, InitKey, InitValue)
|
||||
logger.Info("系统初始化完成")
|
||||
// 初始化默认设置(每次启动都检查)
|
||||
if err := s.settingsService.InitSettings(); err != nil {
|
||||
logger.Warnf("初始化设置失败: %v", err)
|
||||
}
|
||||
|
||||
//// 标记为已初始化
|
||||
//s.settingsService.Set(InitSection, InitKey, InitValue)
|
||||
//logger.Info("系统初始化完成")
|
||||
}
|
||||
|
||||
// IsInitialized 检查是否已初始化
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"baihu/internal/constant"
|
||||
"baihu/internal/database"
|
||||
"baihu/internal/models"
|
||||
)
|
||||
@@ -11,59 +12,77 @@ func NewSettingsService() *SettingsService {
|
||||
return &SettingsService{}
|
||||
}
|
||||
|
||||
// Get 获取设置值
|
||||
// InitSettings 初始化默认设置
|
||||
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)
|
||||
if count == 0 {
|
||||
setting := &models.Setting{
|
||||
Section: section,
|
||||
Key: key,
|
||||
Value: value,
|
||||
}
|
||||
if err := database.DB.Create(setting).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get 获取单个设置
|
||||
func (s *SettingsService) Get(section, key string) string {
|
||||
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 {
|
||||
return def
|
||||
}
|
||||
return ""
|
||||
}
|
||||
return setting.Value
|
||||
}
|
||||
|
||||
// GetWithDefault 获取设置值,如果不存在则返回默认值
|
||||
func (s *SettingsService) GetWithDefault(section, key, defaultValue string) string {
|
||||
value := s.Get(section, key)
|
||||
if value == "" {
|
||||
return defaultValue
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
// Set 设置值
|
||||
// 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,
|
||||
}
|
||||
setting = models.Setting{Section: section, Key: key, Value: value}
|
||||
return database.DB.Create(&setting).Error
|
||||
}
|
||||
// 存在则更新
|
||||
return database.DB.Model(&setting).Update("value", value).Error
|
||||
}
|
||||
|
||||
// GetBySection 获取某个 section 下的所有设置
|
||||
func (s *SettingsService) GetBySection(section string) map[string]string {
|
||||
// GetSection 获取整个 section 的设置
|
||||
func (s *SettingsService) GetSection(section string) map[string]string {
|
||||
var settings []models.Setting
|
||||
database.DB.Where("section = ?", section).Find(&settings)
|
||||
|
||||
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
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// Delete 删除设置
|
||||
func (s *SettingsService) Delete(section, key string) error {
|
||||
return database.DB.Where("section = ? AND key = ?", section, key).Delete(&models.Setting{}).Error
|
||||
}
|
||||
|
||||
// DeleteBySection 删除某个 section 下的所有设置
|
||||
func (s *SettingsService) DeleteBySection(section string) error {
|
||||
return database.DB.Where("section = ?", section).Delete(&models.Setting{}).Error
|
||||
// SetSection 批量设置
|
||||
func (s *SettingsService) SetSection(section string, values map[string]string) error {
|
||||
for key, value := range values {
|
||||
if err := s.Set(section, key, value); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user