feat: prefer DATABASE_URL format for db connection, fallback to individual params

This commit is contained in:
Tiago Yamamoto 2025-12-23 23:23:42 -03:00
parent 2111e7e32d
commit 924255fdfb
2 changed files with 46 additions and 33 deletions

View file

@ -1,12 +1,15 @@
# Environment variables for GoHorse Jobs Backend # Environment variables for GoHorse Jobs Backend
# Database Configuration # Database Configuration (preferred: use DATABASE_URL)
DB_HOST=localhost DATABASE_URL=postgresql://user:password@localhost:5432/gohorsejobs?sslmode=require
DB_PORT=5432
DB_USER=postgres # Alternative: Individual params (used if DATABASE_URL not set)
DB_PASSWORD=yourpassword # DB_HOST=localhost
DB_NAME=gohorsejobs # DB_PORT=5432
DB_SSLMODE=disable # DB_USER=postgres
# DB_PASSWORD=yourpassword
# DB_NAME=gohorsejobs
# DB_SSLMODE=require
# S3/Object Storage Configuration (Civo S3-compatible) # S3/Object Storage Configuration (Civo S3-compatible)
AWS_REGION=nyc1 AWS_REGION=nyc1

View file

@ -14,34 +14,44 @@ var DB *sql.DB
func InitDB() { func InitDB() {
var err error var err error
host := os.Getenv("DB_HOST") var connStr string
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"
}
sslmode := os.Getenv("DB_SSLMODE") // Prefer DATABASE_URL if set (standard format)
if sslmode == "" { if dbURL := os.Getenv("DATABASE_URL"); dbURL != "" {
sslmode = "require" // Default to require for production security 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", sslmode := os.Getenv("DB_SSLMODE")
host, port, user, password, dbname, 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) DB, err = sql.Open("postgres", connStr)
if err != nil { if err != nil {