fix: restructure env handling for better testing capabillities #181
All checks were successful
Build Docker Image / Explore-Gitea-Actions (push) Successful in 47s
Build and Push Docker Image / Explore-Gitea-Actions (push) Successful in 55s

This commit was merged in pull request #195.
This commit is contained in:
2024-09-29 23:51:23 +02:00
parent 25e82be339
commit a70138f2f7
15 changed files with 191 additions and 152 deletions

76
types/settings.go Normal file
View File

@@ -0,0 +1,76 @@
package types
import (
"log"
"log/slog"
)
type ServerSettings struct {
BaseUrl string
Environment string
Smtp *SmtpSettings
}
type SmtpSettings struct {
Host string
Port string
User string
Pass string
FromMail string
FromName string
}
func NewServerSettingsFromEnv(env func(string) string) *ServerSettings {
var smtp *SmtpSettings
if env("SMTP_ENABLED") == "true" {
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")
}
}
settings := &ServerSettings{
BaseUrl: env("BASE_URL"),
Environment: env("ENVIRONMENT"),
Smtp: smtp,
}
if settings.BaseUrl == "" {
log.Fatal("BASE_URL must be set")
}
if settings.Environment == "" {
log.Fatal("ENVIRONMENT must be set")
}
if settings.Environment == "prod" && settings.Smtp == nil {
log.Fatal("SMTP must be enabled in production")
}
slog.Info("BASE_URL is " + settings.BaseUrl)
slog.Info("ENVIRONMENT is " + settings.Environment)
return settings
}