- Markdown Mermaid 图表支持(10+ 种图表类型) - 代码语法高亮(20+ 种常用编程语言) - 文件列表优化(文件夹优先显示) - 文件系统模块化重构 - 新增内部更新日志 CHANGELOG.internal.md - 更新作者邮箱
118 lines
2.8 KiB
Go
118 lines
2.8 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},
|
|
},
|
|
VisibleTabs: []string{"file-system", "db-cli"},
|
|
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
|
|
}
|