From 924255fdfb694412617d23f9c30f8ec2bf7067cc Mon Sep 17 00:00:00 2001 From: Tiago Yamamoto Date: Tue, 23 Dec 2025 23:23:42 -0300 Subject: [PATCH] feat: prefer DATABASE_URL format for db connection, fallback to individual params --- backend/.env.example | 17 +++++--- backend/internal/database/database.go | 62 ++++++++++++++++----------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/backend/.env.example b/backend/.env.example index 8011948..4e58074 100755 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,12 +1,15 @@ # Environment variables for GoHorse Jobs Backend -# Database Configuration -DB_HOST=localhost -DB_PORT=5432 -DB_USER=postgres -DB_PASSWORD=yourpassword -DB_NAME=gohorsejobs -DB_SSLMODE=disable +# Database Configuration (preferred: use DATABASE_URL) +DATABASE_URL=postgresql://user:password@localhost:5432/gohorsejobs?sslmode=require + +# Alternative: Individual params (used if DATABASE_URL not set) +# DB_HOST=localhost +# DB_PORT=5432 +# DB_USER=postgres +# DB_PASSWORD=yourpassword +# DB_NAME=gohorsejobs +# DB_SSLMODE=require # S3/Object Storage Configuration (Civo S3-compatible) AWS_REGION=nyc1 diff --git a/backend/internal/database/database.go b/backend/internal/database/database.go index e2e30a9..389d47b 100755 --- a/backend/internal/database/database.go +++ b/backend/internal/database/database.go @@ -14,34 +14,44 @@ var DB *sql.DB func InitDB() { var err error - host := os.Getenv("DB_HOST") - if host == "" { - log.Fatal("DB_HOST environment variable not set") - } - user := os.Getenv("DB_USER") - if user == "" { - log.Fatal("DB_USER environment variable not set") - } - password := os.Getenv("DB_PASSWORD") - if password == "" { - log.Fatal("DB_PASSWORD environment variable not set") - } - dbname := os.Getenv("DB_NAME") - if dbname == "" { - log.Fatal("DB_NAME environment variable not set") - } - port := os.Getenv("DB_PORT") - if port == "" { - port = "5432" - } + var connStr string - sslmode := os.Getenv("DB_SSLMODE") - if sslmode == "" { - sslmode = "require" // Default to require for production security - } + // Prefer DATABASE_URL if set (standard format) + if dbURL := os.Getenv("DATABASE_URL"); dbURL != "" { + connStr = dbURL + log.Println("Using DATABASE_URL for connection") + } else { + // Fallback to individual params for backward compatibility + host := os.Getenv("DB_HOST") + if host == "" { + log.Fatal("DATABASE_URL or DB_HOST environment variable not set") + } + user := os.Getenv("DB_USER") + if user == "" { + log.Fatal("DB_USER environment variable not set") + } + password := os.Getenv("DB_PASSWORD") + if password == "" { + log.Fatal("DB_PASSWORD environment variable not set") + } + dbname := os.Getenv("DB_NAME") + if dbname == "" { + log.Fatal("DB_NAME environment variable not set") + } + port := os.Getenv("DB_PORT") + if port == "" { + port = "5432" + } - connStr := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s", - host, port, user, password, dbname, sslmode) + sslmode := os.Getenv("DB_SSLMODE") + if sslmode == "" { + sslmode = "require" // Default to require for production security + } + + connStr = fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s", + host, port, user, password, dbname, sslmode) + log.Println("Using individual DB_* params for connection") + } DB, err = sql.Open("postgres", connStr) if err != nil {