package config import ( "github.com/caarlos0/env/v8" "time" ) type Config struct { Server struct { Host string `env:"SERVER_HOST" env-default:"localhost"` Port string `env:"SERVER_PORT" env-default:"8080"` } Database struct { DSN string `env:"DB_DSN,required"` } Auth struct { AccessTokenSecret string `env:"ACCESS_TOKEN_SECRET,required"` RefreshTokenSecret string `env:"REFRESH_TOKEN_SECRET,required"` AccessTokenExpiry time.Duration `env:"ACCESS_TOKEN_EXPIRY" env-default:"15m"` RefreshTokenExpiry time.Duration `env:"REFRESH_TOKEN_EXPIRY" env-default:"168h"` // 7 дней } SMTP struct { Host string `env:"SMTP_HOST,required"` Port int `env:"SMTP_PORT,required"` Username string `env:"SMTP_USERNAME,required"` Password string `env:"SMTP_PASSWORD,required"` From string `env:"SMTP_FROM,required"` } App struct { URL string `env:"APP_URL,required"` } Vault struct { Address string `env:"VAULT_ADDR,required"` Token string `env:"VAULT_TOKEN,required"` } `envPrefix:"VAULT_"` } func Load() (*Config, error) { cfg := &Config{} if err := env.Parse(cfg); err != nil { return nil, err } return cfg, nil }