package config import ( "github.com/spf13/viper" ) type Config struct { Server ServerConfig `mapstructure:"server"` Database DatabaseConfig `mapstructure:"database"` JWT JWTConfig `mapstructure:"jwt"` AI AIConfig `mapstructure:"ai"` } type ServerConfig struct { Port int `mapstructure:"port"` Mode string `mapstructure:"mode"` } type DatabaseConfig struct { Driver string `mapstructure:"driver"` SQLite SQLiteConfig `mapstructure:"sqlite"` Postgres PostgresConfig `mapstructure:"postgres"` MySQL MySQLConfig `mapstructure:"mysql"` } type SQLiteConfig struct { Path string `mapstructure:"path"` } type PostgresConfig struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` User string `mapstructure:"user"` Password string `mapstructure:"password"` DBName string `mapstructure:"dbname"` } type MySQLConfig struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` User string `mapstructure:"user"` Password string `mapstructure:"password"` DBName string `mapstructure:"dbname"` } type JWTConfig struct { Secret string `mapstructure:"secret"` ExpireHours int `mapstructure:"expire_hours"` } type AIConfig struct { Provider string `mapstructure:"provider"` MaxHistoryMessages int `mapstructure:"max_history_messages"` MaxTokens int `mapstructure:"max_tokens"` OpenAI OpenAIConfig `mapstructure:"openai"` Aliyun AliyunConfig `mapstructure:"aliyun"` } type OpenAIConfig struct { APIKey string `mapstructure:"api_key"` BaseURL string `mapstructure:"base_url"` Model string `mapstructure:"model"` } type AliyunConfig struct { APIKey string `mapstructure:"api_key"` Model string `mapstructure:"model"` } var AppConfig *Config func LoadConfig(path string) error { viper.SetConfigFile(path) if err := viper.ReadInConfig(); err != nil { return err } AppConfig = &Config{} return viper.Unmarshal(AppConfig) }