Initial commit

This commit is contained in:
2026-06-30 15:14:37 +08:00
commit 15dab96872
311 changed files with 95639 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
// Package store defines the data persistence layer interface.
package store
+102
View File
@@ -0,0 +1,102 @@
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()
}