62 lines
1.1 KiB
Go
62 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"log"
|
|
"net"
|
|
"net/url"
|
|
"os"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
type Config struct {
|
|
DBHost string
|
|
DBPort string
|
|
DBName string
|
|
DBUser string
|
|
DBPassword string
|
|
DBSchema string
|
|
}
|
|
|
|
func getEnv(key string) string {
|
|
v := os.Getenv(key)
|
|
if v == "" {
|
|
log.Fatalf("missing required env var: %s", key)
|
|
}
|
|
return v
|
|
}
|
|
func getEnvOrDefault(key, default_string string) string {
|
|
v := os.Getenv(key)
|
|
if v == "" {
|
|
return default_string
|
|
}
|
|
return v
|
|
}
|
|
|
|
func Load() Config {
|
|
_ = godotenv.Load()
|
|
|
|
return Config{
|
|
DBHost: getEnv("DB_HOST"),
|
|
DBPort: getEnv("DB_PORT"),
|
|
DBName: getEnv("DB_NAME"),
|
|
DBUser: getEnv("DB_USERNAME"),
|
|
DBPassword: getEnv("DB_PASSWORD"),
|
|
DBSchema: getEnvOrDefault("DB_SCHEMA", "public"),
|
|
}
|
|
}
|
|
|
|
func (cfg Config) DatabaseURL() string {
|
|
u := &url.URL{
|
|
Scheme: "postgres",
|
|
User: url.UserPassword(cfg.DBUser, cfg.DBPassword),
|
|
Host: net.JoinHostPort(cfg.DBHost, cfg.DBPort),
|
|
Path: cfg.DBName,
|
|
}
|
|
q := u.Query()
|
|
q.Set("sslmode", "false")
|
|
q.Set("search_path", cfg.DBSchema)
|
|
u.RawQuery = q.Encode()
|
|
return u.String()
|
|
}
|