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:
1 parent
e474f03d91
commit
0b4e614ec9
15 files changed
+722
-66
No files matched your search
+15
-9
@@ -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
|
||||
|
||||
Reference in new issue
Block a user