package config import ( "os" "time" ) type Config struct { Server ServerConfig Database DatabaseConfig JWT JWTConfig } type ServerConfig struct { Port string Mode string } type DatabaseConfig struct { Host string Port string User string Password string Name string SSLMode string } type JWTConfig struct { Secret string ExpireTime time.Duration } func Load() *Config { return &Config{ Server: ServerConfig{ Port: getEnv("SERVER_PORT", "8080"), Mode: getEnv("GIN_MODE", "debug"), }, Database: DatabaseConfig{ Host: getEnv("DB_HOST", "localhost"), Port: getEnv("DB_PORT", "5432"), User: getEnv("DB_USER", "postgres"), Password: getEnv("DB_PASSWORD", "postgres"), Name: getEnv("DB_NAME", "kefu_sys"), SSLMode: getEnv("DB_SSLMODE", "disable"), }, JWT: JWTConfig{ Secret: getEnv("JWT_SECRET", "kefu-sys-secret-key"), ExpireTime: 24 * time.Hour, }, } } func (d *DatabaseConfig) DSN() string { return "host=" + d.Host + " port=" + d.Port + " user=" + d.User + " password=" + d.Password + " dbname=" + d.Name + " sslmode=" + d.SSLMode } func getEnv(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback }