Files
go-ssh-app/db/mysql.go
2024-12-28 16:08:13 +01:00

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!")
}