feat: add settings pages

This commit is contained in:
engigu
2025-12-20 12:00:08 +08:00
parent 70cc7c0f8c
commit c299ed67d6
23 changed files with 10462 additions and 130 deletions
+12 -7
View File
@@ -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 检查是否已初始化
+47 -28
View File
@@ -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
}