ForFarm/backend/internal/config/config.go
2025-04-04 22:15:12 +07:00

76 lines
2.6 KiB
Go

package config
import (
"log"
"time"
"github.com/spf13/viper"
)
var (
PORT int
POSTGRES_USER string
POSTGRES_PASSWORD string
POSTGRES_DB string
DATABASE_URL string
GOOGLE_CLIENT_ID string
GOOGLE_CLIENT_SECRET string
GOOGLE_REDIRECT_URL string
JWT_SECRET_KEY string
RABBITMQ_URL string
OPENWEATHER_API_KEY string
OPENWEATHER_CACHE_TTL string
WEATHER_FETCH_INTERVAL string
GEMINI_API_KEY string
RATE_LIMIT_ENABLED bool
RATE_LIMIT_RPS int
RATE_LIMIT_TTL time.Duration
)
func Load() {
viper.SetDefault("PORT", 8000)
viper.SetDefault("POSTGRES_USER", "postgres")
viper.SetDefault("POSTGRES_PASSWORD", "@Password123")
viper.SetDefault("POSTGRES_DB", "postgres")
viper.SetDefault("DATABASE_URL", "localhost")
viper.SetDefault("GOOGLE_CLIENT_ID", "google_client_id")
viper.SetDefault("GOOGLE_CLIENT_SECRET", "google_client_secret")
viper.SetDefault("JWT_SECRET_KEY", "jwt_secret_key")
viper.SetDefault("GOOGLE_REDIRECT_URL", "http://localhost:8000/auth/login/google")
viper.SetDefault("RABBITMQ_URL", "amqp://user:password@localhost:5672/")
viper.SetDefault("OPENWEATHER_API_KEY", "openweather_api_key")
viper.SetDefault("OPENWEATHER_CACHE_TTL", "15m")
viper.SetDefault("WEATHER_FETCH_INTERVAL", "15m")
viper.SetDefault("GEMINI_API_KEY", "gemini_api_key")
viper.SetDefault("RATE_LIMIT_ENABLED", true)
viper.SetDefault("RATE_LIMIT_RPS", 10)
viper.SetDefault("RATE_LIMIT_TTL", 5*time.Minute)
viper.SetConfigFile(".env")
viper.AddConfigPath("../../.")
if err := viper.ReadInConfig(); err != nil {
log.Printf("Warning: Could not read config file: %v", err)
}
viper.AutomaticEnv()
PORT = viper.GetInt("PORT")
POSTGRES_USER = viper.GetString("POSTGRES_USER")
POSTGRES_PASSWORD = viper.GetString("POSTGRES_PASSWORD")
POSTGRES_DB = viper.GetString("POSTGRES_DB")
DATABASE_URL = viper.GetString("DATABASE_URL")
GOOGLE_CLIENT_ID = viper.GetString("GOOGLE_CLIENT_ID")
GOOGLE_CLIENT_SECRET = viper.GetString("GOOGLE_CLIENT_SECRET")
GOOGLE_REDIRECT_URL = viper.GetString("GOOGLE_REDIRECT_URL")
JWT_SECRET_KEY = viper.GetString("JWT_SECRET_KEY")
RABBITMQ_URL = viper.GetString("RABBITMQ_URL")
OPENWEATHER_API_KEY = viper.GetString("OPENWEATHER_API_KEY")
OPENWEATHER_CACHE_TTL = viper.GetString("OPENWEATHER_CACHE_TTL")
WEATHER_FETCH_INTERVAL = viper.GetString("WEATHER_FETCH_INTERVAL")
GEMINI_API_KEY = viper.GetString("GEMINI_API_KEY")
RATE_LIMIT_ENABLED = viper.GetBool("RATE_LIMIT_ENABLED")
RATE_LIMIT_RPS = viper.GetInt("RATE_LIMIT_RPS")
RATE_LIMIT_TTL = viper.GetDuration("RATE_LIMIT_TTL")
}