refac: runtime settings are read once at startup and passed in through the composition root; no handler, router or repository reads environment variables

This commit is contained in:
fsylvain committed 2026-09-24 01:30:00 +02:00
1 parent e474f03d91
commit 0b4e614ec9
15 files changed
+722 -66

No files matched your search

+15 -9
View File
@@ -3,6 +3,7 @@ package main
import (
"RenewCMS/api"
validator "RenewCMS/api/pkg/validator"
"RenewCMS/internal/infrastructure/config"
"context"
"errors"
"fmt"
@@ -53,12 +54,17 @@ func main() {
func run() error {
initEnvVariables()
container, closeDb := api.InitContainer()
settings, err := config.NewSettingsFromEnv()
if err != nil {
return err
}
container, closeDb := api.InitContainer(settings)
defer closeDatabase(closeDb)
validator.InitValidator()
server := newServer(api.InitRoutes(container))
return serveUntilStopped(server)
server := newServer(api.InitRoutes(container, settings), settings)
return serveUntilStopped(server, settings)
}
func initEnvVariables() {
@@ -98,9 +104,9 @@ func closeDatabase(closeDb func() error) {
}
}
func newServer(handler http.Handler) *http.Server {
func newServer(handler http.Handler, settings config.Settings) *http.Server {
return &http.Server{
Addr: ":" + os.Getenv("PORT"),
Addr: ":" + settings.Port,
Handler: handler,
ReadHeaderTimeout: readHeaderTimeout,
ReadTimeout: readTimeout,
@@ -109,12 +115,12 @@ func newServer(handler http.Handler) *http.Server {
}
}
func serveUntilStopped(server *http.Server) error {
func serveUntilStopped(server *http.Server, settings config.Settings) error {
stopSignal, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
serverErr := make(chan error, 1)
go listen(server, serverErr)
go listen(server, serverErr, settings)
select {
case err := <-serverErr:
@@ -124,8 +130,8 @@ func serveUntilStopped(server *http.Server) error {
}
}
func listen(server *http.Server, serverErr chan<- error) {
log.Printf("RenewCMS %s (%s) listening on %s, public URL %s", version, os.Getenv("ENVIRONMENT"), server.Addr, os.Getenv("PUBLIC_URL"))
func listen(server *http.Server, serverErr chan<- error, settings config.Settings) {
log.Printf("RenewCMS %s (%s) listening on %s, public URL %s", version, settings.Environment, server.Addr, settings.PublicURL)
err := server.ListenAndServe()
if errors.Is(err, http.ErrServerClosed) {
err = nil