144 lines
3.7 KiB
Go
144 lines
3.7 KiB
Go
package handlers
|
|
|
|
import (
|
|
"awesomeProject/internal/config"
|
|
"fmt"
|
|
"log"
|
|
"strconv"
|
|
)
|
|
|
|
// SystemConfigHandler 系统配置变更处理器
|
|
type SystemConfigHandler struct{}
|
|
|
|
// GetConfigKeys 返回该处理器关心的配置键
|
|
func (h *SystemConfigHandler) GetConfigKeys() []string {
|
|
return []string{
|
|
config.ConfigEnableRegistration,
|
|
config.ConfigMaintenanceMode,
|
|
config.ConfigSiteName,
|
|
config.ConfigSiteUrl,
|
|
}
|
|
}
|
|
|
|
// Handle 处理配置变更事件
|
|
func (h *SystemConfigHandler) Handle(event config.ConfigEvent) error {
|
|
switch event.ConfigKey {
|
|
case config.ConfigEnableRegistration:
|
|
return h.handleRegistrationToggle(event)
|
|
case config.ConfigMaintenanceMode:
|
|
return h.handleMaintenanceModeToggle(event)
|
|
case config.ConfigSiteName:
|
|
return h.handleSiteNameChange(event)
|
|
case config.ConfigSiteUrl:
|
|
return h.handleSiteUrlChange(event)
|
|
default:
|
|
return fmt.Errorf("未知的配置键: %s", event.ConfigKey)
|
|
}
|
|
}
|
|
|
|
// handleRegistrationToggle 处理注册开关变更
|
|
func (h *SystemConfigHandler) handleRegistrationToggle(event config.ConfigEvent) error {
|
|
newValueStr, ok := event.NewValue.(string)
|
|
if !ok {
|
|
return fmt.Errorf("注册开关配置值类型错误")
|
|
}
|
|
|
|
enabled, err := strconv.ParseBool(newValueStr)
|
|
if err != nil {
|
|
return fmt.Errorf("注册开关配置值格式错误: %v", err)
|
|
}
|
|
|
|
if enabled {
|
|
log.Printf("用户注册已开启")
|
|
// 这里可以添加逻辑,比如:
|
|
// 1. 清理注册限制缓存
|
|
// 2. 发送系统通知
|
|
// 3. 更新前端配置缓存
|
|
} else {
|
|
log.Printf("用户注册已关闭")
|
|
// 这里可以添加逻辑,比如:
|
|
// 1. 设置注册限制
|
|
// 2. 通知管理员
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// handleMaintenanceModeToggle 处理维护模式开关
|
|
func (h *SystemConfigHandler) handleMaintenanceModeToggle(event config.ConfigEvent) error {
|
|
newValueStr, ok := event.NewValue.(string)
|
|
if !ok {
|
|
return fmt.Errorf("维护模式配置值类型错误")
|
|
}
|
|
|
|
enabled, err := strconv.ParseBool(newValueStr)
|
|
if err != nil {
|
|
return fmt.Errorf("维护模式配置值格式错误: %v", err)
|
|
}
|
|
|
|
if enabled {
|
|
log.Printf("系统进入维护模式")
|
|
// 这里可以添加逻辑,比如:
|
|
// 1. 断开非管理员用户连接
|
|
// 2. 停止定时任务
|
|
// 3. 发送维护通知
|
|
// 4. 设置维护页面
|
|
} else {
|
|
log.Printf("系统退出维护模式")
|
|
// 这里可以添加逻辑,比如:
|
|
// 1. 恢复正常服务
|
|
// 2. 重启定时任务
|
|
// 3. 发送恢复通知
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// handleSiteNameChange 处理网站名称变更
|
|
func (h *SystemConfigHandler) handleSiteNameChange(event config.ConfigEvent) error {
|
|
newName, ok := event.NewValue.(string)
|
|
if !ok {
|
|
return fmt.Errorf("网站名称配置值类型错误")
|
|
}
|
|
|
|
if len(newName) == 0 {
|
|
return fmt.Errorf("网站名称不能为空")
|
|
}
|
|
|
|
log.Printf("网站名称已更新: %s -> %s", event.OldValue, newName)
|
|
|
|
// 这里可以添加逻辑,比如:
|
|
// 1. 更新邮件模板中的网站名称
|
|
// 2. 刷新前端缓存
|
|
// 3. 更新SEO相关配置
|
|
// 4. 发送更新通知
|
|
|
|
return nil
|
|
}
|
|
|
|
// handleSiteUrlChange 处理网站地址变更
|
|
func (h *SystemConfigHandler) handleSiteUrlChange(event config.ConfigEvent) error {
|
|
newUrl, ok := event.NewValue.(string)
|
|
if !ok {
|
|
return fmt.Errorf("网站地址配置值类型错误")
|
|
}
|
|
|
|
if len(newUrl) == 0 {
|
|
return fmt.Errorf("网站地址不能为空")
|
|
}
|
|
|
|
// 简单的URL格式验证
|
|
if len(newUrl) < 7 || (newUrl[:7] != "http://" && newUrl[:8] != "https://") {
|
|
return fmt.Errorf("网站地址格式不正确,必须以http://或https://开头")
|
|
}
|
|
|
|
log.Printf("网站地址已更新: %s -> %s", event.OldValue, newUrl)
|
|
|
|
// 这里可以添加逻辑,比如:
|
|
// 1. 更新CORS配置
|
|
// 2. 更新回调URL
|
|
// 3. 刷新API文档
|
|
// 4. 更新第三方服务配置
|
|
|
|
return nil
|
|
} |