'init'
This commit is contained in:
121
sc-lktx-backend/internal/pkg/config/config.go
Normal file
121
sc-lktx-backend/internal/pkg/config/config.go
Normal file
@@ -0,0 +1,121 @@
|
||||
// 使用 Viper 从 YAML 文件加载配置
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// Config 全局配置,聚合所有子模块配置
|
||||
type Config struct {
|
||||
Server ServerConfig `mapstructure:"server"`
|
||||
Database DatabaseConfig `mapstructure:"database"`
|
||||
Redis RedisConfig `mapstructure:"redis"`
|
||||
MinIO MinIOConfig `mapstructure:"minio"`
|
||||
RabbitMQ RabbitMQConfig `mapstructure:"rabbitmq"`
|
||||
Wechat WechatConfig `mapstructure:"wechat"`
|
||||
DingTalk DingTalkConfig `mapstructure:"dingtalk"`
|
||||
JWT JWTConfig `mapstructure:"jwt"`
|
||||
Snowflake SnowflakeConfig `mapstructure:"snowflake"`
|
||||
System SystemConfig `mapstructure:"system"`
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
Port int `mapstructure:"port"`
|
||||
Mode string `mapstructure:"mode"` // debug / release / test
|
||||
}
|
||||
|
||||
type DatabaseConfig struct {
|
||||
Host string `mapstructure:"host"`
|
||||
Port int `mapstructure:"port"`
|
||||
User string `mapstructure:"user"`
|
||||
Password string `mapstructure:"password"`
|
||||
DBName string `mapstructure:"dbname"`
|
||||
SSLMode string `mapstructure:"sslmode"`
|
||||
Timezone string `mapstructure:"timezone"`
|
||||
}
|
||||
|
||||
type RedisConfig struct {
|
||||
Host string `mapstructure:"host"`
|
||||
Port int `mapstructure:"port"`
|
||||
Password string `mapstructure:"password"`
|
||||
DB int `mapstructure:"db"`
|
||||
}
|
||||
|
||||
type MinIOConfig struct {
|
||||
Endpoint string `mapstructure:"endpoint"`
|
||||
AccessKey string `mapstructure:"access_key"`
|
||||
SecretKey string `mapstructure:"secret_key"`
|
||||
Bucket string `mapstructure:"bucket"`
|
||||
UseSSL bool `mapstructure:"use_ssl"`
|
||||
BaseURL string `mapstructure:"base_url"`
|
||||
}
|
||||
|
||||
type RabbitMQConfig struct {
|
||||
Host string `mapstructure:"host"`
|
||||
Port int `mapstructure:"port"`
|
||||
User string `mapstructure:"user"`
|
||||
Password string `mapstructure:"password"`
|
||||
VHost string `mapstructure:"vhost"`
|
||||
}
|
||||
|
||||
type WechatConfig struct {
|
||||
AppID string `mapstructure:"app_id"`
|
||||
AppSecret string `mapstructure:"app_secret"`
|
||||
Token string `mapstructure:"token"`
|
||||
EncodingAESKey string `mapstructure:"encoding_aes_key"`
|
||||
}
|
||||
|
||||
type JWTConfig struct {
|
||||
Secret string `mapstructure:"secret"`
|
||||
ExpireHours int `mapstructure:"expire_hours"`
|
||||
}
|
||||
|
||||
type SnowflakeConfig struct {
|
||||
WorkerID int64 `mapstructure:"worker_id"`
|
||||
DatacenterID int64 `mapstructure:"datacenter_id"`
|
||||
}
|
||||
|
||||
// DingTalkConfig 钉钉应用配置
|
||||
type DingTalkConfig struct {
|
||||
AppKey string `mapstructure:"app_key"`
|
||||
AppSecret string `mapstructure:"app_secret"`
|
||||
RobotCode string `mapstructure:"robot_code"`
|
||||
}
|
||||
|
||||
type SystemConfig struct {
|
||||
DefaultAvatar string `mapstructure:"default_avatar"`
|
||||
}
|
||||
|
||||
// DSN 生成 PostgreSQL 连接字符串
|
||||
func (d *DatabaseConfig) DSN() string {
|
||||
return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=%s",
|
||||
d.Host, d.User, d.Password, d.DBName, d.Port, d.SSLMode, d.Timezone)
|
||||
}
|
||||
|
||||
func (r *RedisConfig) Addr() string {
|
||||
return fmt.Sprintf("%s:%d", r.Host, r.Port)
|
||||
}
|
||||
|
||||
func (r *RabbitMQConfig) AMQPURL() string {
|
||||
return fmt.Sprintf("amqp://%s:%s@%s:%d/%s", r.User, r.Password, r.Host, r.Port, r.VHost)
|
||||
}
|
||||
|
||||
// LoadConfig 从 YAML 文件加载配置
|
||||
func LoadConfig(configPath string) (*Config, error) {
|
||||
v := viper.New()
|
||||
v.SetConfigFile(configPath)
|
||||
v.SetConfigType("yaml")
|
||||
|
||||
if err := v.ReadInConfig(); err != nil {
|
||||
return nil, fmt.Errorf("failed to read config file: %w", err)
|
||||
}
|
||||
|
||||
var cfg Config
|
||||
if err := v.Unmarshal(&cfg); err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal config: %w", err)
|
||||
}
|
||||
|
||||
return &cfg, nil
|
||||
}
|
||||
Reference in New Issue
Block a user