新增:应用配置管理模块,优化文件系统功能
- 新增 ConfigAPI 和 ConfigService 实现配置管理 - 新增 SettingsPanel 和 UpdateNotification 组件 - 文件系统模块化重构,提升代码质量 - 提取公共函数,优化代码结构 - 版本号更新至 0.2.0
This commit is contained in:
118
internal/service/config_service.go
Normal file
118
internal/service/config_service.go
Normal file
@@ -0,0 +1,118 @@
|
||||
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: "db-cli", Title: "数据库", Enabled: true},
|
||||
{Key: "file-system", Title: "文件管理", Enabled: true},
|
||||
{Key: "device", Title: "设备调用测试", Enabled: true},
|
||||
},
|
||||
VisibleTabs: []string{"db-cli", "file-system", "device"},
|
||||
DefaultTab: "db-cli",
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user