3
0
corteza/internal/config/database.go

54 lines
957 B
Go

package config
import (
"github.com/namsral/flag"
"github.com/pkg/errors"
)
type (
Database struct {
DSN string
Profiler string
}
)
var dbs map[string]*Database
func (c *Database) Validate() error {
if c == nil {
return nil
}
if c.DSN == "" {
return errors.New("No DB DSN is set, can't connect to database")
}
return nil
}
func (*Database) Init(prefix ...string) *Database {
if dbs == nil {
dbs = make(map[string]*Database)
}
name := "default"
if len(prefix) > 0 {
name = prefix[0]
}
if db := dbs[name]; db != nil {
return db
}
p := func(s string) string {
if len(prefix) > 0 {
return prefix[0] + "-" + s
}
return s
}
db := new(Database)
flag.StringVar(&db.DSN, p("db-dsn"), "", "DSN for database connection (e.g. user:pass@tcp(db1:3306)/dbname?collation=utf8mb4_general_ci)")
flag.StringVar(&db.Profiler, p("db-profiler"), "", "Profiler for DB queries (none, stdout)")
dbs[name] = db
return db
}