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 }