2025-08-12 20:20:39 +03:00

47 lines
1.3 KiB
Go

package config
import (
"github.com/caarlos0/env/v8"
"github.com/joho/godotenv"
"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"`
URL string `env:"AppURL,required"`
}
GRPC struct {
MessageServiceAddress string `env:"MESSAGE_SERVICE_ADDRESS"`
}
}
func Load() (*Config, error) {
// Пытаемся загрузить .env файл (если он есть)
// Игнорируем ошибку, если файла нет
_ = godotenv.Load()
cfg := &Config{}
if err := env.Parse(cfg); err != nil {
return nil, err
}
return cfg, nil
}