Private
Public Access
1
0
Files
u-desk/internal/service/config_service.go
绝尘 72fef3e56f 优化:文件服务器安全重构+编辑器增强+搜索排序+更新面板Markdown渲染
- 路径校验提取validateFilePath+sentinel error替代字符串匹配
- requireUpdateAPI收敛7处重复nil检查
- 端口18765统一为8073,消除分散魔法数字
- CodeMirror添加搜索功能+滚动位置LRU缓存恢复
- 文件列表新增列排序+搜索过滤
- Toolbar重排:快捷访问内嵌+搜索框集成+历史改图标
- 重命名零闪烁:updateFilePath草稿迁移
- changelog用marked渲染+sanitizeHtml防XSS
- MigrateTabConfig扩展map驱动覆盖openclaw-manager→version迁移

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 21:53:31 +08:00

120 lines
3.0 KiB
Go

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: "version", Title: "版本历史", Enabled: true},
},
VisibleTabs: []string{"file-system", "db-cli", "markdown-editor", "version"},
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
}