2026-04-15 18:03:21 +02:00

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()
}