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 }