Skip to content

Commit d62923b

Browse files
authored
chore: move configuration to router initialization (#98)
1 parent 5ae2340 commit d62923b

File tree

4 files changed

+38
-29
lines changed

4 files changed

+38
-29
lines changed

internal/controllers/routing.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"io"
66
"net/http"
7+
"os"
78
"time"
89

910
"github.com/envelope-zero/backend/internal/models"
@@ -19,6 +20,30 @@ var version = "0.0.0"
1920

2021
// Router controls the routes for the API.
2122
func Router() (*gin.Engine, error) {
23+
// gin uses debug as the default mode, we use release for
24+
// security reasons
25+
ginMode, ok := os.LookupEnv("GIN_MODE")
26+
if !ok {
27+
gin.SetMode("release")
28+
} else {
29+
gin.SetMode(ginMode)
30+
}
31+
32+
// Log format can be explicitly set.
33+
// If it is not set, it defaults to human readable for development
34+
// and JSON for release
35+
logFormat, ok := os.LookupEnv("LOG_FORMAT")
36+
output := io.Writer(os.Stdout)
37+
if (!ok && gin.IsDebugging()) || (ok && logFormat == "human") {
38+
output = zerolog.ConsoleWriter{Out: os.Stdout}
39+
}
40+
41+
zerolog.SetGlobalLevel(zerolog.InfoLevel)
42+
if gin.IsDebugging() {
43+
zerolog.SetGlobalLevel(zerolog.DebugLevel)
44+
}
45+
log.Logger = log.Output(output).With().Timestamp().Logger()
46+
2247
// Set up the router and middlewares
2348
r := gin.New()
2449

internal/controllers/routing_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"testing"
66

77
"github.com/envelope-zero/backend/internal/controllers"
8+
"github.com/gin-gonic/gin"
89
"github.com/stretchr/testify/assert"
910
)
1011

@@ -16,3 +17,13 @@ func TestDBConnectionErrorHandled(t *testing.T) {
1617
assert.NotNil(t, err)
1718
os.Unsetenv("DB_HOST")
1819
}
20+
21+
func TestGinMode(t *testing.T) {
22+
os.Setenv("GIN_MODE", "debug")
23+
_, err := controllers.Router()
24+
25+
assert.Nil(t, err, "%T: %v", err, err)
26+
assert.True(t, gin.IsDebugging())
27+
28+
os.Unsetenv("GIN_MODE")
29+
}

internal/test/helpers.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"net/http"
66
"net/http/httptest"
7+
"os"
78
"strings"
89
"testing"
910
"time"
@@ -27,6 +28,7 @@ type APIResponse struct {
2728
func Request(t *testing.T, method, url, body string, headers ...map[string]string) httptest.ResponseRecorder {
2829
byteStr := []byte(body)
2930

31+
os.Setenv("LOG_FORMAT", "human")
3032
router, err := controllers.Router()
3133
if err != nil {
3234
t.Fatal(err)

main.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,12 @@
11
package main
22

33
import (
4-
"io"
5-
"os"
6-
7-
"github.com/gin-gonic/gin"
8-
"github.com/rs/zerolog"
94
"github.com/rs/zerolog/log"
105

116
"github.com/envelope-zero/backend/internal/controllers"
127
)
138

149
func main() {
15-
// gin uses debug as the default mode, we use release for
16-
// security reasons
17-
ginMode, ok := os.LookupEnv("GIN_MODE")
18-
if !ok {
19-
gin.SetMode("release")
20-
} else {
21-
gin.SetMode(ginMode)
22-
}
23-
24-
// Log format can be explicitly set.
25-
// If it is not set, it defaults to human readable for development
26-
// and JSON for release
27-
logFormat, ok := os.LookupEnv("LOG_FORMAT")
28-
output := io.Writer(os.Stdout)
29-
if (!ok && gin.IsDebugging()) || (ok && logFormat == "human") {
30-
output = zerolog.ConsoleWriter{Out: os.Stdout}
31-
}
32-
33-
zerolog.SetGlobalLevel(zerolog.InfoLevel)
34-
if gin.IsDebugging() {
35-
zerolog.SetGlobalLevel(zerolog.DebugLevel)
36-
}
37-
log.Logger = log.Output(output).With().Timestamp().Logger()
38-
3910
r, err := controllers.Router()
4011
if err != nil {
4112
log.Fatal().Msg(err.Error())

0 commit comments

Comments
 (0)