94 lines
2.0 KiB
Go
94 lines
2.0 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
// Config represents the application configuration
|
|
type Config struct {
|
|
Server ServerConfig
|
|
Database DatabaseConfig
|
|
Environment string
|
|
}
|
|
|
|
// ServerConfig holds server-related configuration
|
|
type ServerConfig struct {
|
|
Port int
|
|
}
|
|
|
|
// DatabaseConfig holds database-related configuration
|
|
type DatabaseConfig struct {
|
|
Host string
|
|
Port int
|
|
User string
|
|
Password string
|
|
DBName string
|
|
SSLMode string
|
|
Type string // "postgresql" or "mysql"
|
|
}
|
|
|
|
// Load loads configuration from environment variables
|
|
func Load() (*Config, error) {
|
|
// Server configuration
|
|
serverPort, err := strconv.Atoi(getEnv("SERVER_PORT", "8080"))
|
|
if err != nil {
|
|
serverPort = 8080
|
|
}
|
|
|
|
// Database configuration - use DB_* environment variables
|
|
dbPort, err := strconv.Atoi(getEnv("DB_PORT", "5432"))
|
|
if err != nil {
|
|
dbPort = 5432
|
|
}
|
|
|
|
// Get database type - defaults to postgresql if not specified
|
|
dbType := getEnv("DB_TYPE", "postgresql")
|
|
|
|
// Set default port based on database type if not explicitly provided
|
|
if os.Getenv("DB_PORT") == "" {
|
|
if dbType == "mysql" {
|
|
dbPort = 3306
|
|
} else {
|
|
dbPort = 5432
|
|
}
|
|
}
|
|
|
|
// Set default user based on database type if not explicitly provided
|
|
dbUser := getEnv("DB_USER", "")
|
|
if dbUser == "" {
|
|
if dbType == "mysql" {
|
|
// Use root user for MySQL by default
|
|
dbUser = "root"
|
|
} else {
|
|
// Use postgres user for PostgreSQL by default
|
|
dbUser = "postgres"
|
|
}
|
|
}
|
|
|
|
return &Config{
|
|
Server: ServerConfig{
|
|
Port: serverPort,
|
|
},
|
|
Database: DatabaseConfig{
|
|
Host: getEnv("DB_HOST", "localhost"),
|
|
Port: dbPort,
|
|
User: dbUser,
|
|
Password: getEnv("DB_PASSWORD", "password"),
|
|
DBName: getEnv("DB_NAME", "pinepods_database"),
|
|
SSLMode: getEnv("DB_SSL_MODE", "disable"),
|
|
Type: dbType,
|
|
},
|
|
Environment: getEnv("ENVIRONMENT", "development"),
|
|
}, nil
|
|
}
|
|
|
|
// getEnv gets an environment variable or returns a default value
|
|
func getEnv(key, defaultValue string) string {
|
|
value, exists := os.LookupEnv(key)
|
|
if !exists {
|
|
return defaultValue
|
|
}
|
|
return value
|
|
}
|