48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type Config struct {
|
|
DatabaseURL string
|
|
Port string
|
|
Env string
|
|
OpenFIGIKey string
|
|
CoinGeckoKey string
|
|
PriceFetchInterval time.Duration
|
|
PriceCleanInterval time.Duration
|
|
SnapshotHorizonDays int // nombre de jours dans le futur couverts par les snapshots
|
|
}
|
|
|
|
func Load() *Config {
|
|
fetchInterval, err := time.ParseDuration(getenv("PRICE_FETCH_INTERVAL", "1h"))
|
|
if err != nil {
|
|
fetchInterval = time.Hour
|
|
}
|
|
|
|
horizonDays, err := strconv.Atoi(getenv("SNAPSHOT_HORIZON_DAYS", "30"))
|
|
if err != nil || horizonDays < 0 {
|
|
horizonDays = 30
|
|
}
|
|
|
|
return &Config{
|
|
DatabaseURL: getenv("DATABASE_URL", "postgres://account:account@localhost:5432/account?sslmode=disable"),
|
|
Port: getenv("PORT", "8080"),
|
|
Env: getenv("ENV", "development"),
|
|
OpenFIGIKey: os.Getenv("OPENFIGI_API_KEY"),
|
|
CoinGeckoKey: os.Getenv("COINGECKO_API_KEY"),
|
|
PriceFetchInterval: fetchInterval,
|
|
PriceCleanInterval: 24 * time.Hour,
|
|
SnapshotHorizonDays: horizonDays,
|
|
}
|
|
}
|
|
|
|
func getenv(key, fallback string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return fallback
|
|
}
|