Changeset 0.21.1.1 (#87)

This commit is contained in:
2026-03-01 16:40:26 +00:00
parent 70aa78e486
commit 09c7281552
20 changed files with 853 additions and 102 deletions

View File

@@ -1,6 +1,7 @@
package config
import (
"fmt"
"os"
"strconv"
@@ -60,7 +61,7 @@ func Load() *Config {
return &Config{
Port: getEnv("PORT", "8080"),
DatabaseURL: getEnv("DATABASE_URL", ""),
DatabaseURL: resolveDatabaseURL(),
DBDriver: getEnv("DB_DRIVER", ""),
JWTSecret: getEnv("JWT_SECRET", "dev-secret-change-me"),
Environment: getEnv("ENVIRONMENT", "development"),
@@ -85,6 +86,31 @@ func Load() *Config {
}
}
// resolveDatabaseURL returns the database connection string.
//
// Resolution order:
// 1. DATABASE_URL — explicit DSN (K8s, .env, manual)
// 2. POSTGRES_* vars — assembled from individual env vars:
// POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB
// (set by K8s manifest and docker-compose)
// 3. Empty string — backend runs without database
func resolveDatabaseURL() string {
if dsn := os.Getenv("DATABASE_URL"); dsn != "" {
return dsn
}
// Assemble from individual vars (K8s sets POSTGRES_*, docker-compose may too)
host := getEnv("POSTGRES_HOST", "")
if host == "" {
return ""
}
port := getEnv("POSTGRES_PORT", "5432")
user := getEnv("POSTGRES_USER", "")
pass := getEnv("POSTGRES_PASSWORD", "")
db := getEnv("POSTGRES_DB", "chat_switchboard")
ssl := getEnv("POSTGRES_SSLMODE", "disable")
return fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=%s", user, pass, host, port, db, ssl)
}
// sanitizeBasePath ensures the path starts with / and doesn't end with /.
// Empty string means root (no prefix).
func sanitizeBasePath(p string) string {