✨ Database allocator
This commit is contained in:
39
pkg/internal/database/allocator.go
Normal file
39
pkg/internal/database/allocator.go
Normal 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
|
||||
}
|
16
pkg/internal/database/connect.go
Normal file
16
pkg/internal/database/connect.go
Normal 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
|
||||
}
|
Reference in New Issue
Block a user