feat: extract into remaining packages
All checks were successful
Build and Push Docker Image / Build-And-Push-Docker-Image (push) Successful in 1m19s
All checks were successful
Build and Push Docker Image / Build-And-Push-Docker-Image (push) Successful in 1m19s
There has been a cyclic dependency. transaction -> treasure_chest -> transaction_recurring -> transaction This has been temporarily solved by moving the GenerateTransactions function into the transaction package. In the future, this function has to be rewritten to use a proper Service insteas of direct DB access or replaced with a different system entirely.
This commit is contained in:
109
internal/core/settings.go
Normal file
109
internal/core/settings.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"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(ctx context.Context, env func(string) string) (*Settings, error) {
|
||||
var (
|
||||
smtp *SmtpSettings
|
||||
err error
|
||||
)
|
||||
if env("SMTP_ENABLED") == "true" {
|
||||
smtp, err = getSmtpSettings(ctx, 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.ErrorContext(ctx, "BASE_URL must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
if settings.Port == "" {
|
||||
slog.ErrorContext(ctx, "PORT must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
if settings.Environment == "" {
|
||||
slog.ErrorContext(ctx, "ENVIRONMENT must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
|
||||
slog.InfoContext(ctx, "settings read", "BASE_URL", settings.BaseUrl)
|
||||
slog.InfoContext(ctx, "settings read", "ENVIRONMENT", settings.Environment)
|
||||
slog.InfoContext(ctx, "settings read", "ENVIRONMENT", settings.Environment)
|
||||
|
||||
return settings, nil
|
||||
}
|
||||
|
||||
func getSmtpSettings(ctx context.Context, 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.ErrorContext(ctx, "SMTP_HOST must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
if smtp.Port == "" {
|
||||
slog.ErrorContext(ctx, "SMTP_PORT must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
if smtp.User == "" {
|
||||
slog.ErrorContext(ctx, "SMTP_USER must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
if smtp.Pass == "" {
|
||||
slog.ErrorContext(ctx, "SMTP_PASS must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
if smtp.FromMail == "" {
|
||||
slog.ErrorContext(ctx, "SMTP_FROM_MAIL must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
if smtp.FromName == "" {
|
||||
slog.ErrorContext(ctx, "SMTP_FROM_NAME must be set")
|
||||
return nil, ErrMissingConfig
|
||||
}
|
||||
|
||||
return &smtp, nil
|
||||
}
|
||||
|
||||
func IsOtelEnabled(env func(string) string) bool {
|
||||
return env("OTEL_ENABLED") == "true"
|
||||
}
|
||||
Reference in New Issue
Block a user