Database allocator

This commit is contained in:
2024-10-20 19:04:41 +08:00
parent e5a32bc05a
commit 4adbfe9c19
23 changed files with 536 additions and 29 deletions

View File

@ -0,0 +1,39 @@
package database
import (
"fmt"
"github.com/samber/lo"
"github.com/spf13/viper"
"strings"
)
func AllocDatabase(name string) (string, error) {
// Disabled
if Kdb == nil {
return "host=localhost", fmt.Errorf("database feature is disabled")
}
var connString []string
connString = strings.Split(viper.GetString("database.dsn"), " ")
connString = lo.Filter(connString, func(item string, _ int) bool {
return !strings.HasPrefix(item, "dbname=")
})
name = viper.GetString("database.prefix") + name
var exists bool
if err := Kdb.QueryRow("SELECT EXISTS(SELECT datname FROM pg_catalog.pg_database WHERE datname = $1)", name).Scan(&exists); err != nil {
return strings.Join(connString, " "), nil
}
if !exists {
_, err := Kdb.Exec("CREATE DATABASE " + name)
if err != nil {
return strings.Join(connString, " "), err
}
}
connString = append(connString, "dbname="+name)
return strings.Join(connString, " "), nil
}

View File

@ -0,0 +1,16 @@
package database
import (
"database/sql"
_ "github.com/lib/pq"
)
var Kdb *sql.DB
func Connect(str string) (*sql.DB, error) {
db, err := sql.Open("postgres", str)
if err == nil {
Kdb = db
}
return db, err
}