Files
2026-03-15 20:48:19 +08:00

55 lines
928 B
Go

package db
import (
"fmt"
"os"
"path/filepath"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var DB *gorm.DB
func Init(dbPath string) error {
dir := filepath.Dir(dbPath)
if dir != "." && dir != "" {
if err := os.MkdirAll(dir, 0o755); err != nil {
return fmt.Errorf("create db directory: %w", err)
}
}
db, err := gorm.Open(sqlite.Open(dbPath+"?_journal_mode=WAL&_busy_timeout=5000"), &gorm.Config{
Logger: logger.Default.LogMode(logger.Warn),
})
if err != nil {
return fmt.Errorf("open database: %w", err)
}
sqlDB, err := db.DB()
if err != nil {
return fmt.Errorf("get sql.DB: %w", err)
}
sqlDB.SetMaxOpenConns(1)
if err := db.AutoMigrate(
&SystemConfig{},
&EmailRecord{},
&Task{},
&TaskLog{},
&CardCode{},
&Card{},
&Account{},
); err != nil {
return fmt.Errorf("auto migrate: %w", err)
}
DB = db
return nil
}
func GetDB() *gorm.DB {
return DB
}