package main import ( "butterfliu/migrations" "database/sql" "fmt" "log" "os" "path/filepath" _ "github.com/mattn/go-sqlite3" ) var DB *sql.DB func GetDB() *sql.DB { return DB } func InitDB(dbPath string) error { dir := filepath.Dir(dbPath) if _, err := os.Stat(dir); os.IsNotExist(err) { if err := os.MkdirAll(dir, 0755); err != nil { return fmt.Errorf("failed to create database directory %s: %v", dir, err) } } var err error DB, err = sql.Open("sqlite3", dbPath) if err != nil { return fmt.Errorf("failed to open database: %v", err) } if err = DB.Ping(); err != nil { return fmt.Errorf("failed to ping database: %v", err) } if err = migrations.InitMigrationTable(DB); err != nil { return fmt.Errorf("failed to initialize migration table: %v", err) } // Auto-migrate by default, can be disabled with AUTO_MIGRATE=false if os.Getenv("AUTO_MIGRATE") != "false" { log.Println("Auto-migration enabled, applying pending migrations...") if err = migrations.MigrateUp(DB); err != nil { log.Printf("Warning: Auto migration failed: %v", err) } else { log.Println("Auto-migration completed successfully") } } else { log.Println("Auto-migration disabled") } return nil } func CloseDB() error { if DB != nil { return DB.Close() } return nil }