67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
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!")
|
|
}
|