package config import ( "fmt" "os" "strconv" "strings" "time" "github.com/joho/godotenv" ) type Config struct { DatabaseURL string JWTSecret string JWTExpirationHours int Port string AllowedOrigins []string TushareToken string } func Load() (*Config, error) { _ = godotenv.Load() databaseURL := os.Getenv("DATABASE_URL") if databaseURL == "" { return nil, fmt.Errorf("DATABASE_URL must be set") } jwtSecret := os.Getenv("JWT_SECRET") if jwtSecret == "" { jwtSecret = "change-me-in-production" fmt.Fprintln(os.Stderr, "WARNING: JWT_SECRET not set, using default secret") } expHours, _ := strconv.Atoi(os.Getenv("JWT_EXPIRATION_HOURS")) if expHours == 0 { expHours = 168 // 7 days } port := os.Getenv("PORT") if port == "" { port = "3019" } allowedOrigins := []string{"*"} if v := os.Getenv("ALLOWED_ORIGINS"); v != "" { allowedOrigins = strings.Split(v, ",") for i := range allowedOrigins { allowedOrigins[i] = strings.TrimSpace(allowedOrigins[i]) } } tushareToken := os.Getenv("TUSHARE_TOKEN") return &Config{ DatabaseURL: databaseURL, JWTSecret: jwtSecret, JWTExpirationHours: expHours, Port: port, AllowedOrigins: allowedOrigins, TushareToken: tushareToken, }, nil } func (c *Config) JWTExpiration() time.Duration { return time.Duration(c.JWTExpirationHours) * time.Hour }