package config import ( "bufio" "os" "strings" ) type Config struct { DatabaseURL string JWTSecret string RedisAddr string ServerPort string Env string BaseURL string } func Load() *Config { loadEnvFile(".env") port := getEnv("SERVER_PORT", "8080") return &Config{ DatabaseURL: getEnv("DATABASE_URL", "postgres://postgres:postgres@localhost:5432/calendarapi?sslmode=disable"), JWTSecret: getEnv("JWT_SECRET", "dev-secret-change-me"), RedisAddr: os.Getenv("REDIS_ADDR"), ServerPort: port, Env: getEnv("ENV", "development"), BaseURL: getEnv("BASE_URL", "http://localhost:"+port), } } func loadEnvFile(path string) { f, err := os.Open(path) if err != nil { return } defer f.Close() scanner := bufio.NewScanner(f) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if line == "" || strings.HasPrefix(line, "#") { continue } k, v, ok := strings.Cut(line, "=") if !ok { continue } k = strings.TrimSpace(k) v = strings.TrimSpace(v) if os.Getenv(k) == "" { os.Setenv(k, v) } } } func getEnv(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback }