Files
solosw 99b11b04e4 1.0
2026-01-05 14:11:34 +08:00

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
}