package models import ( "log" "os" "path/filepath" "airwallex-admin/config" "github.com/glebarez/sqlite" "gorm.io/gorm" ) var DB *gorm.DB func InitDB() *gorm.DB { dbPath := config.Cfg.DatabaseURL // Ensure the directory exists dir := filepath.Dir(dbPath) if dir != "." && dir != "" { if err := os.MkdirAll(dir, 0755); err != nil { log.Fatalf("failed to create database directory: %v", err) } } db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) if err != nil { log.Fatalf("failed to connect to database: %v", err) } // Create tables only if they don't exist (skip AutoMigrate to avoid // SQLite ALTER TABLE issues with existing Python-created schemas) migrator := db.Migrator() models := []interface{}{&SystemSetting{}, &ApiToken{}, &CardLog{}, &AuditLog{}} for _, model := range models { if !migrator.HasTable(model) { if err := migrator.CreateTable(model); err != nil { log.Fatalf("failed to create table: %v", err) } } } DB = db return db }