FreePad/src/models/database/database.go

88 lines
1.6 KiB
Go
Raw Normal View History

2022-05-15 15:21:21 +03:00
package database
import (
"database/sql"
"fmt"
"os"
"time"
_ "github.com/go-sql-driver/mysql"
)
// Declare the default database driver
const defaultDatabaseDriver string = "sqlite"
// Declare the valid database drivers
var validDatabaseDrivers []string = []string{"sqlite", "mysql"}
// Get the database type to use
func getDbType() string {
// Grab the environment variable
db, test := os.LookupEnv(`DATABASE_DRIVER`)
// Check if the test has failed
if !test {
return defaultDatabaseDriver
}
for _, v := range validDatabaseDrivers {
// Check if the provided database corresponds to this entry
if v == db {
// This is a valid database type
return db
}
}
// No matches
return defaultDatabaseDriver
}
func GetConn() (*sql.DB, error) {
// Check what kind of database we are looking for
dbConnType := getDbType()
if dbConnType == `mysql` {
return GetMysqlConn()
} else {
return GetLiteConn()
}
}
func GetSqliteDatabasePath() string {
return "main.db"
}
func GetLiteConn() (*sql.DB, error) {
// Declare the database file name
dbFile := GetSqliteDatabasePath()
db, err := sql.Open("sqlite3", dbFile)
if err != nil {
return nil, err
}
return db, nil
}
func GetMysqlConn() (*sql.DB, error) {
2022-05-15 15:21:21 +03:00
user := os.Getenv("MYSQL_USER")
password := os.Getenv("MYSQL_PASSWORD")
2022-05-17 00:17:44 +03:00
dburl := os.Getenv("MYSQL_URL")
2022-05-15 15:21:21 +03:00
dbname := os.Getenv("MYSQL_DATABASE")
2022-05-17 00:17:44 +03:00
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s", user, password, dburl, dbname))
2022-05-15 15:21:21 +03:00
if err != nil {
return nil, err
2022-05-15 15:21:21 +03:00
}
// Set options
db.SetConnMaxLifetime(time.Minute * 5)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
return db, nil
2022-05-15 15:21:21 +03:00
}