package config import ( "github.com/spf13/viper" ) // Config stores all configuration of the application. type Config struct { Environment string `mapstructure:"ENVIRONMENT"` ServerPort string `mapstructure:"SERVER_PORT"` DBHost string `mapstructure:"DB_HOST"` DBPort string `mapstructure:"DB_PORT"` DBUser string `mapstructure:"DB_USER"` DBPassword string `mapstructure:"DB_PASSWORD"` DBName string `mapstructure:"DB_NAME"` JWTSecret string `mapstructure:"JWT_SECRET"` JWTExpiration int `mapstructure:"JWT_EXPIRATION_HOURS"` WeaviateHost string `mapstructure:"WEAVIATE_HOST"` WeaviateScheme string `mapstructure:"WEAVIATE_SCHEME"` MigrationPath string `mapstructure:"MIGRATION_PATH"` RedisAddr string `mapstructure:"REDIS_ADDR"` RedisPassword string `mapstructure:"REDIS_PASSWORD"` RedisDB int `mapstructure:"REDIS_DB"` BatchSize int `mapstructure:"BATCH_SIZE"` RateLimit int `mapstructure:"RATE_LIMIT"` RateLimitBurst int `mapstructure:"RATE_LIMIT_BURST"` PageSize int `mapstructure:"PAGE_SIZE"` NLPMemoryCacheCap int `mapstructure:"NLP_MEMORY_CACHE_CAP"` NLPRedisCacheTTLSeconds int `mapstructure:"NLP_REDIS_CACHE_TTL_SECONDS"` NLPUseLingua bool `mapstructure:"NLP_USE_LINGUA"` NLPUseTFIDF bool `mapstructure:"NLP_USE_TFIDF"` BleveIndexPath string `mapstructure:"BLEVE_INDEX_PATH"` } // Global config instance var Cfg *Config // LoadConfig reads configuration from file or environment variables. func LoadConfig() (*Config, error) { v := viper.New() v.SetDefault("ENVIRONMENT", "development") v.SetDefault("SERVER_PORT", ":8080") v.SetDefault("DB_HOST", "localhost") v.SetDefault("DB_PORT", "5432") v.SetDefault("DB_USER", "user") v.SetDefault("DB_PASSWORD", "password") v.SetDefault("DB_NAME", "tercul") v.SetDefault("JWT_SECRET", "secret") v.SetDefault("JWT_EXPIRATION_HOURS", 24) v.SetDefault("WEAVIATE_HOST", "localhost:8080") v.SetDefault("WEAVIATE_SCHEME", "http") v.SetDefault("MIGRATION_PATH", "internal/data/migrations") v.SetDefault("REDIS_ADDR", "localhost:6379") v.SetDefault("REDIS_PASSWORD", "") v.SetDefault("REDIS_DB", 0) v.SetDefault("BATCH_SIZE", 100) v.SetDefault("RATE_LIMIT", 10) v.SetDefault("RATE_LIMIT_BURST", 100) v.SetDefault("NLP_MEMORY_CACHE_CAP", 1024) v.SetDefault("NLP_REDIS_CACHE_TTL_SECONDS", 3600) v.SetDefault("NLP_USE_LINGUA", true) v.SetDefault("NLP_USE_TFIDF", true) v.SetDefault("BLEVE_INDEX_PATH", "./bleve_index") v.AutomaticEnv() var config Config if err := v.Unmarshal(&config); err != nil { return nil, err } // Set global config Cfg = &config return &config, nil }