1.0
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user