Initial commit
This commit is contained in:
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user