package db import ( "database/sql" "fmt" "log" "tui-ssh-app/config" _ "github.com/go-sql-driver/mysql" ) var DB *sql.DB // ConnectDB establishes the database connection and initializes tables. func ConnectDB() { var err error // Form the DSN (Data Source Name) dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", config.GetEnv("DB_USER"), config.GetEnv("DB_PASSWORD"), config.GetEnv("DB_HOST"), config.GetEnv("DB_PORT"), config.GetEnv("DB_NAME"), ) // Open the connection DB, err = sql.Open("mysql", dsn) if err != nil { log.Fatalf("Error connecting to database: %v", err) } // Ping the database to ensure connection is successful if err = DB.Ping(); err != nil { log.Fatalf("Error pinging database: %v", err) } fmt.Println("Connected to MySQL successfully!") // Initialize tables initializeTables() } // initializeTables creates required tables if they don't exist. func initializeTables() { queries := []string{ `CREATE TABLE IF NOT EXISTS sessions ( id INT AUTO_INCREMENT PRIMARY KEY, user VARCHAR(255) NOT NULL, host VARCHAR(255) NOT NULL, port INT NOT NULL, password TEXT, private_key TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );`, } for _, query := range queries { if _, err := DB.Exec(query); err != nil { log.Fatalf("Error creating table: %v", err) } } fmt.Println("Tables are initialized successfully!") }