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
# 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

View file

@ -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 {