Files
Meshray-Manager/internal/store/sqlite/store.go
T
2026-06-30 15:14:37 +08:00

103 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package sqlite
import (
"fmt"
"git.zkcoi.com/zkcoi/meshray/internal/model"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
)
// Store SQLite 存储实现(基于 GORM + glebarez/sqlite
type Store struct {
db *gorm.DB
}
// New 创建 Store 实例
func New(dbPath string) (*Store, error) {
// 使用 glebarez/sqlite(纯Go 实现,无需 CGO
// 这是 modernc.org/sqlite 的 GORM 适配层
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil {
return nil, fmt.Errorf("初始化数据库失败:%w", err)
}
store := &Store{db: db}
// 自动迁移所有表
if err := store.AutoMigrate(); err != nil {
return nil, fmt.Errorf("数据库迁移失败:%w", err)
}
// 初始化默认系统设置
if err := store.initDefaultSettings(); err != nil {
return nil, fmt.Errorf("初始化系统设置失败:%w", err)
}
return store, nil
}
// AutoMigrate 自动创建所有数据表
func (s *Store) AutoMigrate() error {
return s.db.AutoMigrate(
&model.Network{},
&model.Device{},
&model.Policy{},
&model.Service{},
&model.MeshSeed{},
&model.PendingJoin{},
&model.AlertRule{},
&model.AuditLog{},
&model.User{},
&model.SystemConfig{},
&model.DDNSConfig{},
&model.NetworkMember{},
&model.SecurityKey{}, // 新增:安全密钥表
&model.SystemSetting{}, // 新增:系统设置表
&model.ExternalService{}, // 新增:外部服务表
&model.DDNSProvider{}, // 新增:DDNS 服务商配置
&model.DDNSUsage{}, // 新增:DDNS 用途定义
&model.NetworkDDNSBinding{}, // 新增:网络 DDNS 绑定
&model.Notification{}, // 新增:通知表
)
}
// initDefaultSettings 初始化默认系统设置
func (s *Store) initDefaultSettings() error {
// 检查是否已有系统设置
var count int64
if err := s.db.Model(&model.SystemSetting{}).Count(&count).Error; err != nil {
return err
}
// 如果没有记录,创建默认设置
if count == 0 {
return s.db.Create(&model.SystemSetting{
ID: 1,
ServerPort: 51820,
LogLevel: "info",
LogFormat: "console",
MaxBackups: 7,
MaxAge: 30,
Theme: "light",
Language: "zh-CN",
}).Error
}
return nil
}
// DB 获取 GORM 数据库连接
func (s *Store) DB() *gorm.DB {
return s.db
}
// Close 关闭数据库连接
func (s *Store) Close() error {
sqlDB, err := s.db.DB()
if err != nil {
return err
}
return sqlDB.Close()
}