package service import ( "encoding/json" "fmt" "u-desk/internal/storage" "u-desk/internal/storage/models" "gorm.io/gorm" ) // ConfigService 配置服务 type ConfigService struct { db *gorm.DB } // NewConfigService 创建配置服务实例 func NewConfigService() (*ConfigService, error) { db, err := storage.InitFast() if err != nil { return nil, fmt.Errorf("数据库初始化失败: %w", err) } return &ConfigService{db: db}, nil } // TabDefinition Tab 定义 type TabDefinition struct { Key string `json:"key"` Title string `json:"title"` Enabled bool `json:"enabled"` } // TabConfig Tab 配置 type TabConfig struct { AvailableTabs []TabDefinition `json:"available_tabs"` VisibleTabs []string `json:"visible_tabs"` DefaultTab string `json:"default_tab"` } // 默认 Tab 配置 var defaultTabConfig = TabConfig{ AvailableTabs: []TabDefinition{ {Key: "file-system", Title: "文件管理", Enabled: true}, {Key: "db-cli", Title: "数据库", Enabled: true}, {Key: "markdown-editor", Title: "Markdown", Enabled: true}, {Key: "openclaw-manager", Title: "OpenClaw", Enabled: true}, }, VisibleTabs: []string{"file-system", "db-cli", "markdown-editor", "openclaw-manager"}, DefaultTab: "file-system", } const ( tabConfigKey = "tab_config" ) // GetTabConfig 获取 Tab 配置 func (s *ConfigService) GetTabConfig() (*TabConfig, error) { var config models.AppConfig // 查询配置 err := s.db.Where("`key` = ?", tabConfigKey).First(&config).Error if err != nil { if err == gorm.ErrRecordNotFound { // 不存在配置,返回默认配置 return &defaultTabConfig, nil } return nil, fmt.Errorf("查询配置失败: %w", err) } // 解析 JSON var tabConfig TabConfig if err := json.Unmarshal([]byte(config.Value), &tabConfig); err != nil { // 解析失败,返回默认配置 return &defaultTabConfig, nil } // 验证配置完整性 if len(tabConfig.AvailableTabs) == 0 || len(tabConfig.VisibleTabs) == 0 { return &defaultTabConfig, nil } return &tabConfig, nil } // SaveTabConfig 保存 Tab 配置 func (s *ConfigService) SaveTabConfig(config *TabConfig) error { // 序列化为 JSON jsonData, err := json.Marshal(config) if err != nil { return fmt.Errorf("序列化配置失败: %w", err) } // 查询是否存在配置 var existingConfig models.AppConfig err = s.db.Where("`key` = ?", tabConfigKey).First(&existingConfig).Error if err == gorm.ErrRecordNotFound { // 不存在,创建新配置 newConfig := models.AppConfig{ Key: tabConfigKey, Value: string(jsonData), Description: "Tab 显示和排序配置", } if err := s.db.Create(&newConfig).Error; err != nil { return fmt.Errorf("创建配置失败: %w", err) } } else if err != nil { return fmt.Errorf("查询配置失败: %w", err) } else { // 存在,更新配置 existingConfig.Value = string(jsonData) if err := s.db.Save(&existingConfig).Error; err != nil { return fmt.Errorf("更新配置失败: %w", err) } } return nil }