/
providers.go
171 lines (126 loc) · 3.28 KB
/
providers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package di
import (
"sync"
"github.com/olegshishkin/go-logger"
logzero "github.com/olegshishkin/go-logger-zerolog"
logzeroexample "github.com/olegshishkin/go-logger-zerolog/example"
"github.com/rs/zerolog"
"github.com/olegshishkin/financier/config"
"github.com/olegshishkin/financier/pkg/adapters/input/rest/handlers"
"github.com/olegshishkin/financier/pkg/adapters/input/rest/server"
"github.com/olegshishkin/financier/pkg/core/ports/input"
"github.com/olegshishkin/financier/pkg/core/ports/output"
"github.com/olegshishkin/financier/pkg/core/services"
)
var (
//nolint:gochecknoglobals
serverOnce sync.Once
//nolint:gochecknoglobals
hdlDelegateOnce sync.Once
//nolint:gochecknoglobals
swgHandlerOnce sync.Once
//nolint:gochecknoglobals
accHandlerOnce sync.Once
//nolint:gochecknoglobals
accServiceOnce sync.Once
//nolint:gochecknoglobals
accStorageOnce sync.Once
//nolint:gochecknoglobals
middlewareOnce sync.Once
//nolint:gochecknoglobals
webLogOnce sync.Once
//nolint:gochecknoglobals
sourceLogOnce sync.Once
//nolint:gochecknoglobals
configOnce sync.Once
)
func provideServer(
cfg *config.Config,
log logger.Logger,
handlers *handlers.HandlerDelegate,
mdl *server.Middlewares,
) *server.Server {
var srv *server.Server
serverOnce.Do(func() {
srv = server.NewServer(cfg, log)
srv.RegisterSwaggerHandler(handlers, mdl)
srv.RegisterHandlers(handlers, mdl)
})
return srv
}
func provideServerMiddlewares(log logger.Logger) *server.Middlewares {
var mdl *server.Middlewares
middlewareOnce.Do(func() {
mdl = server.NewMiddlewares(log)
})
return mdl
}
func provideHandlerDelegate(
sh handlers.SwaggerHTTPRequestHandler,
ah handlers.AccountHTTPRequestHandler,
) *handlers.HandlerDelegate {
var hd *handlers.HandlerDelegate
hdlDelegateOnce.Do(func() {
hd = handlers.NewHandlerDelegate(sh, ah)
})
return hd
}
func provideSwaggerHandler(log logger.Logger) *handlers.SwaggerHandler {
var hdl *handlers.SwaggerHandler
swgHandlerOnce.Do(func() {
hdl = handlers.NewSwaggerHandler(log)
})
return hdl
}
func provideAccountHandler(as input.AccountService) *handlers.AccountHandler {
var hdl *handlers.AccountHandler
accHandlerOnce.Do(func() {
hdl = handlers.NewAccountHandler(as)
})
return hdl
}
func provideAccountService(as output.AccountStorage) *services.AccountService {
var svc *services.AccountService
accServiceOnce.Do(func() {
svc = services.NewAccountService(as)
})
return svc
}
func provideWebLogger(zeroLogger *zerolog.Logger) *logzero.Wrapper {
var log *logzero.Wrapper
webLogOnce.Do(func() {
log = logzero.From(logzeroexample.Web(zeroLogger))
})
return log
}
func provideSourceLogger(cfg *config.Config) *zerolog.Logger {
var log *zerolog.Logger
sourceLogOnce.Do(func() {
writer, err := logzero.NewLogWriterBuilder().
WithConsole(logzeroexample.ConsoleWriter()).
Build()
if err != nil {
panic(err)
}
log = logzeroexample.Base(writer, logLevel(cfg))
})
return log
}
func provideConfig() *config.Config {
var cfg *config.Config
configOnce.Do(func() {
cfg = config.ReadConfig()
})
return cfg
}
func logLevel(cfg *config.Config) logger.Level {
lvlCfg := cfg.Logging.Level
if lvlCfg == "" {
return logger.LogLevel()
}
lvl, err := logger.ParseLevel(lvlCfg)
if err != nil {
panic(err)
}
return lvl
}