Files
spend-sparrow/internal/types/settings.go
Tim Wundenberg 0c40680d76
Some checks failed
Build Docker Image / Build-Docker-Image (push) Has been cancelled
fix: move implementation to "internal" package
2025-05-29 13:39:26 +02:00

86 lines
1.7 KiB
Go

package types
import (
"spend-sparrow/internal/log"
)
type Settings struct {
Port string
PrometheusEnabled bool
BaseUrl string
Environment string
Smtp *SmtpSettings
}
type SmtpSettings struct {
Host string
Port string
User string
Pass string
FromMail string
FromName string
}
func NewSettingsFromEnv(env func(string) string) *Settings {
var smtp *SmtpSettings
if env("SMTP_ENABLED") == "true" {
smtp = getSmtpSettings(env)
}
settings := &Settings{
Port: env("PORT"),
PrometheusEnabled: env("PROMETHEUS_ENABLED") == "true",
BaseUrl: env("BASE_URL"),
Environment: env("ENVIRONMENT"),
Smtp: smtp,
}
if settings.BaseUrl == "" {
log.Fatal("BASE_URL must be set")
}
if settings.Port == "" {
log.Fatal("PORT must be set")
}
if settings.Environment == "" {
log.Fatal("ENVIRONMENT must be set")
}
log.Info("BASE_URL is %q", settings.BaseUrl)
log.Info("ENVIRONMENT is %q", settings.Environment)
return settings
}
func getSmtpSettings(env func(string) string) *SmtpSettings {
smtp := SmtpSettings{
Host: env("SMTP_HOST"),
Port: env("SMTP_PORT"),
User: env("SMTP_USER"),
Pass: env("SMTP_PASS"),
FromMail: env("SMTP_FROM_MAIL"),
FromName: env("SMTP_FROM_NAME"),
}
if smtp.Host == "" {
log.Fatal("SMTP_HOST must be set")
}
if smtp.Port == "" {
log.Fatal("SMTP_PORT must be set")
}
if smtp.User == "" {
log.Fatal("SMTP_USER must be set")
}
if smtp.Pass == "" {
log.Fatal("SMTP_PASS must be set")
}
if smtp.FromMail == "" {
log.Fatal("SMTP_FROM_MAIL must be set")
}
if smtp.FromName == "" {
log.Fatal("SMTP_FROM_NAME must be set")
}
return &smtp
}