Add cursor rules and initial configuration for Tender Management Go Backend
This commit is contained in:
+142
@@ -0,0 +1,142 @@
|
||||
package infra
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// Config holds all configuration for the application
|
||||
type Config struct {
|
||||
Server ServerConfig `mapstructure:"server"`
|
||||
Database DatabaseConfig `mapstructure:"database"`
|
||||
Cache CacheConfig `mapstructure:"cache"`
|
||||
Queue QueueConfig `mapstructure:"queue"`
|
||||
Search SearchConfig `mapstructure:"search"`
|
||||
Auth AuthConfig `mapstructure:"auth"`
|
||||
AI AIConfig `mapstructure:"ai"`
|
||||
Scraping ScrapingConfig `mapstructure:"scraping"`
|
||||
Logging LoggingConfig `mapstructure:"logging"`
|
||||
RateLimit RateLimitConfig `mapstructure:"rate_limiting"`
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
Host string `mapstructure:"host"`
|
||||
Port int `mapstructure:"port"`
|
||||
Timeout time.Duration `mapstructure:"timeout"`
|
||||
ReadTimeout time.Duration `mapstructure:"read_timeout"`
|
||||
WriteTimeout time.Duration `mapstructure:"write_timeout"`
|
||||
}
|
||||
|
||||
type DatabaseConfig struct {
|
||||
MongoDB MongoConfig `mapstructure:"mongodb"`
|
||||
}
|
||||
|
||||
type MongoConfig struct {
|
||||
URI string `mapstructure:"uri"`
|
||||
Name string `mapstructure:"name"`
|
||||
Timeout time.Duration `mapstructure:"timeout"`
|
||||
MaxPoolSize int `mapstructure:"max_pool_size"`
|
||||
}
|
||||
|
||||
type CacheConfig struct {
|
||||
Redis RedisConfig `mapstructure:"redis"`
|
||||
}
|
||||
|
||||
type RedisConfig struct {
|
||||
Host string `mapstructure:"host"`
|
||||
Port int `mapstructure:"port"`
|
||||
Password string `mapstructure:"password"`
|
||||
DB int `mapstructure:"db"`
|
||||
PoolSize int `mapstructure:"pool_size"`
|
||||
}
|
||||
|
||||
type QueueConfig struct {
|
||||
RabbitMQ RabbitMQConfig `mapstructure:"rabbitmq"`
|
||||
}
|
||||
|
||||
type RabbitMQConfig struct {
|
||||
URL string `mapstructure:"url"`
|
||||
Exchange string `mapstructure:"exchange"`
|
||||
Queues map[string]string `mapstructure:"queues"`
|
||||
}
|
||||
|
||||
type SearchConfig struct {
|
||||
Elasticsearch ElasticsearchConfig `mapstructure:"elasticsearch"`
|
||||
}
|
||||
|
||||
type ElasticsearchConfig struct {
|
||||
URLs []string `mapstructure:"urls"`
|
||||
Username string `mapstructure:"username"`
|
||||
Password string `mapstructure:"password"`
|
||||
IndexPrefix string `mapstructure:"index_prefix"`
|
||||
}
|
||||
|
||||
type AuthConfig struct {
|
||||
JWT JWTConfig `mapstructure:"jwt"`
|
||||
}
|
||||
|
||||
type JWTConfig struct {
|
||||
Secret string `mapstructure:"secret"`
|
||||
AccessTokenDuration time.Duration `mapstructure:"access_token_duration"`
|
||||
RefreshTokenDuration time.Duration `mapstructure:"refresh_token_duration"`
|
||||
}
|
||||
|
||||
type AIConfig struct {
|
||||
OpenAI OpenAIConfig `mapstructure:"openai"`
|
||||
}
|
||||
|
||||
type OpenAIConfig struct {
|
||||
APIKey string `mapstructure:"api_key"`
|
||||
Model string `mapstructure:"model"`
|
||||
MaxTokens int `mapstructure:"max_tokens"`
|
||||
}
|
||||
|
||||
type ScrapingConfig struct {
|
||||
UserAgent string `mapstructure:"user_agent"`
|
||||
Timeout time.Duration `mapstructure:"timeout"`
|
||||
MaxRetries int `mapstructure:"max_retries"`
|
||||
DelayBetweenRequests time.Duration `mapstructure:"delay_between_requests"`
|
||||
}
|
||||
|
||||
type LoggingConfig struct {
|
||||
Level string `mapstructure:"level"`
|
||||
Format string `mapstructure:"format"`
|
||||
Output string `mapstructure:"output"`
|
||||
File LogFileConfig `mapstructure:"file"`
|
||||
}
|
||||
|
||||
type LogFileConfig struct {
|
||||
Path string `mapstructure:"path"`
|
||||
MaxSize int `mapstructure:"max_size"` // MB
|
||||
MaxBackups int `mapstructure:"max_backups"`
|
||||
MaxAge int `mapstructure:"max_age"` // days
|
||||
Compress bool `mapstructure:"compress"`
|
||||
}
|
||||
|
||||
type RateLimitConfig struct {
|
||||
RequestsPerMinute int `mapstructure:"requests_per_minute"`
|
||||
Burst int `mapstructure:"burst"`
|
||||
}
|
||||
|
||||
// LoadConfig loads configuration from file and environment variables
|
||||
func LoadConfig(path string) (*Config, error) {
|
||||
viper.SetConfigName("config")
|
||||
viper.SetConfigType("yaml")
|
||||
viper.AddConfigPath(path)
|
||||
|
||||
// Enable reading from environment variables
|
||||
viper.AutomaticEnv()
|
||||
|
||||
// Read configuration file
|
||||
if err := viper.ReadInConfig(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var config Config
|
||||
if err := viper.Unmarshal(&config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &config, nil
|
||||
}
|
||||
Reference in New Issue
Block a user