Skip to content

Commit 94e9462

Browse files
committed
refactor initialization process
1 parent 657d647 commit 94e9462

File tree

10 files changed

+152
-95
lines changed

10 files changed

+152
-95
lines changed

cmd/api/main.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,44 @@ import (
55
"fmt"
66
"log"
77
"sandbox-go-api-sqlboiler-rest-auth/internal/config"
8-
"sandbox-go-api-sqlboiler-rest-auth/internal/routes"
8+
"sandbox-go-api-sqlboiler-rest-auth/internal/logger"
9+
"sandbox-go-api-sqlboiler-rest-auth/internal/server"
910

1011
"github.com/volatiletech/sqlboiler/v4/boil"
1112

12-
"go.uber.org/zap/zapcore"
13-
14-
"go.uber.org/zap"
15-
1613
_ "github.com/lib/pq"
1714
)
1815

1916
func main() {
2017
// config
2118
cfg := config.NewConfig()
2219

23-
// logger
24-
zapConfig := zap.NewDevelopmentConfig()
25-
encConfig := zap.NewDevelopmentEncoderConfig()
26-
encConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
27-
zapConfig.EncoderConfig = encConfig
28-
logger, _ := zapConfig.Build()
20+
// db
21+
db, err := sql.Open("postgres", cfg.GetDataSourceName())
22+
if err != nil {
23+
log.Fatalln("cannot open the database", cfg.GetDataSourceName())
24+
}
2925
defer func() {
30-
_ = logger.Sync()
26+
_ = db.Close()
3127
}()
3228

33-
// db
34-
connStr := "host=localhost port=5433 dbname=sandbox user=postgres password=postgres sslmode=disable"
35-
db, err := sql.Open("postgres", connStr)
29+
// enable debug mode
30+
boil.DebugMode = cfg.IsDev
31+
32+
// logger
33+
zl, err := logger.NewLogger(cfg)
3634
if err != nil {
37-
log.Fatalln("cannot open the database")
35+
log.Fatalln("cannot create logger")
3836
}
3937
defer func() {
40-
_ = db.Close()
38+
_ = zl.Sync()
4139
}()
4240

43-
// sqlboiler debug mode
44-
boil.DebugMode = true
41+
// router
42+
e := server.NewServer(cfg, db, zl)
4543

46-
e := routes.NewRouter(db, logger)
47-
e.Logger.Fatal(e.Start(fmt.Sprintf(":%s", cfg.Port)))
44+
err = e.Start(fmt.Sprintf(":%s", cfg.Port))
45+
if err != nil {
46+
zl.Sugar().Fatal(err)
47+
}
4848
}

internal/config/config.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import (
88
)
99

1010
var (
11-
appConfig *config
11+
appConfig *Config
1212
once sync.Once
1313
)
1414

15-
type config struct {
15+
type Config struct {
1616
Port string // flag and env
1717
IsDev bool // flag
1818
DBHost string // env
@@ -23,7 +23,7 @@ type config struct {
2323
SecretKey string // env
2424
}
2525

26-
func (c *config) GetDataSourceName() string {
26+
func (c *Config) GetDataSourceName() string {
2727
sslmode := "enable"
2828
if c.IsDev {
2929
sslmode = "disable"
@@ -34,14 +34,12 @@ func (c *config) GetDataSourceName() string {
3434
)
3535
}
3636

37-
func NewConfig() *config {
37+
func NewConfig() *Config {
3838
once.Do(func() {
3939
var isDev bool
4040
flag.BoolVar(&isDev, "dev", false, "enable development mode")
4141
flag.Parse()
42-
fmt.Println(isDev)
43-
44-
appConfig = &config{
42+
appConfig = &Config{
4543
Port: getEnv("PORT", "8081"),
4644
IsDev: isDev,
4745
DBHost: getEnv("MY_DB_HOST", "localhost"),
@@ -51,6 +49,10 @@ func NewConfig() *config {
5149
DBPassword: getEnv("MY_DB_PASSWORD", "postgres"),
5250
SecretKey: getEnv("MY_SECRET_KEY", "12345678901234567890123456789012"),
5351
}
52+
53+
if isDev {
54+
fmt.Println("============ Running app on development mode ============")
55+
}
5456
})
5557
return appConfig
5658
}

internal/handlers/handlers.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,25 @@ package handlers
22

33
import (
44
"database/sql"
5+
"sandbox-go-api-sqlboiler-rest-auth/internal/config"
6+
7+
"github.com/gorilla/securecookie"
58

69
"go.uber.org/zap"
710
)
811

912
type Handlers struct {
10-
db *sql.DB
11-
logger *zap.Logger
12-
slogger *zap.SugaredLogger
13+
cfg *config.Config
14+
db *sql.DB
15+
logger *zap.SugaredLogger
16+
secureCookie *securecookie.SecureCookie
1317
}
1418

15-
func NewHandler(db *sql.DB, l *zap.Logger) *Handlers {
16-
var handler Handlers
17-
handler.db = db
18-
handler.logger = l
19-
handler.slogger = l.Sugar()
20-
return &handler
19+
func NewHandler(cfg *config.Config, db *sql.DB, l *zap.Logger, sc *securecookie.SecureCookie) *Handlers {
20+
return &Handlers{
21+
cfg: cfg,
22+
db: db,
23+
logger: l.Sugar(),
24+
secureCookie: sc,
25+
}
2126
}

internal/handlers/session.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package handlers
33
import (
44
"context"
55
"net/http"
6-
"sandbox-go-api-sqlboiler-rest-auth/internal/scookie"
76
"sandbox-go-api-sqlboiler-rest-auth/models"
87
"time"
98

@@ -35,7 +34,7 @@ func (h *Handlers) CreateSession(c echo.Context) error {
3534
if err != nil {
3635
return echo.NewHTTPError(http.StatusInternalServerError)
3736
}
38-
h.slogger.Info(u)
37+
h.logger.Info(u)
3938
if u.HashedPassword != req.Password {
4039
return echo.NewHTTPError(http.StatusBadRequest)
4140
}
@@ -50,8 +49,7 @@ func (h *Handlers) CreateSession(c echo.Context) error {
5049
return echo.NewHTTPError(http.StatusInternalServerError)
5150
}
5251

53-
sc := scookie.NewSecureCookie()
54-
encoded, err := sc.Encode("session", s.ID)
52+
encoded, err := h.secureCookie.Encode("session", s.ID)
5553
if err != nil {
5654
return echo.NewHTTPError(http.StatusInternalServerError)
5755
}
@@ -60,7 +58,7 @@ func (h *Handlers) CreateSession(c echo.Context) error {
6058
Value: encoded,
6159
Path: "/",
6260
Expires: time.Now().Add(time.Hour * 24 * 30),
63-
Secure: true,
61+
Secure: !h.cfg.IsDev,
6462
HttpOnly: true,
6563
SameSite: 2,
6664
}

internal/handlers/status.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package handlers
22

33
import (
4-
"fmt"
54
"net/http"
65
"sandbox-go-api-sqlboiler-rest-auth/models"
76

@@ -18,9 +17,9 @@ func (h *Handlers) GetStatus(c echo.Context) error {
1817
uv := c.Get("user")
1918
if uv != nil {
2019
u = uv.(*models.User)
21-
fmt.Println("user data?", u)
20+
h.logger.Debug("user data?", u)
2221
} else {
23-
fmt.Println("not set user session")
22+
h.logger.Debug("not set user session")
2423
}
2524
return c.String(http.StatusOK, "server is running")
2625
}

internal/logger/logger.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package logger
2+
3+
import (
4+
"sandbox-go-api-sqlboiler-rest-auth/internal/config"
5+
6+
"go.uber.org/zap"
7+
"go.uber.org/zap/zapcore"
8+
)
9+
10+
func NewLogger(cfg *config.Config) (*zap.Logger, error) {
11+
var logger *zap.Logger
12+
13+
if cfg.IsDev {
14+
zapConfig := zap.NewDevelopmentConfig()
15+
encConfig := zap.NewDevelopmentEncoderConfig()
16+
encConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
17+
zapConfig.EncoderConfig = encConfig
18+
logger, err := zapConfig.Build()
19+
if err != nil {
20+
return logger, err
21+
}
22+
return logger, nil
23+
}
24+
25+
logger, err := zap.NewProduction()
26+
if err != nil {
27+
return logger, err
28+
}
29+
return logger, nil
30+
}

internal/scookie/scookie.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package scookie
22

33
import (
4+
"sandbox-go-api-sqlboiler-rest-auth/internal/config"
5+
46
"github.com/gorilla/securecookie"
57
)
68

7-
func NewSecureCookie() *securecookie.SecureCookie {
8-
var hashKey = []byte("jkb2kJU4C6ad11DOFElCYMhtF8kvw75n")
9+
func NewSecureCookie(cfg *config.Config) *securecookie.SecureCookie {
10+
var hashKey = []byte(cfg.SecretKey)
911
return securecookie.New(hashKey, nil)
1012
}
Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
package routes
1+
package server
22

33
import (
44
"database/sql"
55
"fmt"
6-
"sandbox-go-api-sqlboiler-rest-auth/internal/scookie"
76
"sandbox-go-api-sqlboiler-rest-auth/models"
87
"time"
98

9+
"github.com/gorilla/securecookie"
10+
1011
"go.uber.org/zap"
1112
"go.uber.org/zap/zapcore"
1213

1314
"github.com/labstack/echo/v4"
1415
)
1516

16-
func SessionRestorer(db *sql.DB) echo.MiddlewareFunc {
17+
func SessionRestorer(db *sql.DB, logger *zap.SugaredLogger, sc *securecookie.SecureCookie) echo.MiddlewareFunc {
1718
return func(next echo.HandlerFunc) echo.HandlerFunc {
1819
return func(c echo.Context) error {
19-
fmt.Println("test middleware")
20-
sc := scookie.NewSecureCookie()
21-
2220
cv, err := c.Cookie("session")
2321
if err != nil {
2422
return next(c)
@@ -29,7 +27,7 @@ func SessionRestorer(db *sql.DB) echo.MiddlewareFunc {
2927
if err != nil {
3028
return echo.NewHTTPError(500, "cannot decode cookie", err)
3129
}
32-
fmt.Println("got cookie(session id): ", dv)
30+
logger.Debug("got cookie(session id): ", dv)
3331

3432
sess, err := models.FindSession(c.Request().Context(), db, dv)
3533
if err != nil {
@@ -40,7 +38,7 @@ func SessionRestorer(db *sql.DB) echo.MiddlewareFunc {
4038
if err != nil {
4139
return echo.NewHTTPError(500, "cannod find user from session relation", dv, err)
4240
}
43-
fmt.Println("got user in middleware", user)
41+
logger.Debug("got user in middleware", user)
4442
c.Set("user", user)
4543
return next(c)
4644
}

0 commit comments

Comments
 (0)