69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
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)
|
|
}
|
|
|
|
// Enable foreign key support in SQLite
|
|
_, err = DB.Exec("PRAGMA foreign_keys = ON")
|
|
if err != nil {
|
|
return fmt.Errorf("failed to enable foreign keys: %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
|
|
}
|