67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
func Init() {
|
|
var err error
|
|
|
|
host := os.Getenv("MYSQL_HOST")
|
|
if host == "" {
|
|
host = "localhost"
|
|
}
|
|
|
|
portStr := os.Getenv("MYSQL_PORT")
|
|
var port int
|
|
if portStr == "" {
|
|
port = 3306
|
|
} else {
|
|
port, err = strconv.Atoi(portStr)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("Invalid MYSQL_PORT environment variable: %s", portStr))
|
|
}
|
|
}
|
|
|
|
username := os.Getenv("MYSQL_USERNAME")
|
|
if username == "" {
|
|
panic("MYSQL_USERNAME environment variable is not set")
|
|
}
|
|
|
|
password := os.Getenv("MYSQL_PASSWORD")
|
|
if password == "" {
|
|
panic("MYSQL_PASSWORD environment variable is not set")
|
|
}
|
|
|
|
database := os.Getenv("MYSQL_DATABASE")
|
|
if database == "" {
|
|
panic("MYSQL_DATABASE environment variable is not set")
|
|
}
|
|
|
|
dsn := fmt.Sprintf(
|
|
"%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
username, password, host, port, database,
|
|
)
|
|
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func Close() {
|
|
sqlDB, err := DB.DB()
|
|
if err != nil {
|
|
panic(fmt.Sprintf("Failed to get database instance: %s", err))
|
|
}
|
|
if err := sqlDB.Close(); err != nil {
|
|
panic(fmt.Sprintf("Failed to close database connection: %s", err))
|
|
}
|
|
}
|