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() }