package config import ( "fmt" "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() }