Files
spend-sparrow/internal/types/settings.go
Tim Wundenberg 63ade5916e
All checks were successful
Build Docker Image / Build-Docker-Image (push) Successful in 5m33s
Build and Push Docker Image / Build-And-Push-Docker-Image (push) Successful in 5m4s
fix(observabillity): include otel logs
2025-06-07 15:32:43 +02:00

109 lines
2.2 KiB
Go

package types
import (
"errors"
"log/slog"
)
var (
ErrMissingConfig = errors.New("missing config")
)
type Settings struct {
Port string
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, error) {
var (
smtp *SmtpSettings
err error
)
if env("SMTP_ENABLED") == "true" {
smtp, err = getSmtpSettings(env)
if err != nil {
return nil, err
}
}
settings := &Settings{
Port: env("PORT"),
BaseUrl: env("BASE_URL"),
Environment: env("ENVIRONMENT"),
Smtp: smtp,
}
if settings.BaseUrl == "" {
slog.Error("BASE_URL must be set")
return nil, ErrMissingConfig
}
if settings.Port == "" {
slog.Error("PORT must be set")
return nil, ErrMissingConfig
}
if settings.Environment == "" {
slog.Error("ENVIRONMENT must be set")
return nil, ErrMissingConfig
}
slog.Info("settings read", "BASE_URL", settings.BaseUrl)
slog.Info("settings read", "ENVIRONMENT", settings.Environment)
slog.Info("settings read", "ENVIRONMENT", settings.Environment)
return settings, nil
}
func getSmtpSettings(env func(string) string) (*SmtpSettings, error) {
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 == "" {
slog.Error("SMTP_HOST must be set")
return nil, ErrMissingConfig
}
if smtp.Port == "" {
slog.Error("SMTP_PORT must be set")
return nil, ErrMissingConfig
}
if smtp.User == "" {
slog.Error("SMTP_USER must be set")
return nil, ErrMissingConfig
}
if smtp.Pass == "" {
slog.Error("SMTP_PASS must be set")
return nil, ErrMissingConfig
}
if smtp.FromMail == "" {
slog.Error("SMTP_FROM_MAIL must be set")
return nil, ErrMissingConfig
}
if smtp.FromName == "" {
slog.Error("SMTP_FROM_NAME must be set")
return nil, ErrMissingConfig
}
return &smtp, nil
}
func IsOtelEnabled(env func(string) string) bool {
return env("OTEL_ENABLED") == "true"
}