-
Notifications
You must be signed in to change notification settings - Fork 46
/
dependency.go
199 lines (169 loc) · 4.2 KB
/
dependency.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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
package dependency
import (
"pkg.agungdp.dev/candi/codebase/interfaces"
)
// Dependency base
type Dependency interface {
GetMiddleware() interfaces.Middleware
SetMiddleware(mw interfaces.Middleware)
GetBroker() interfaces.Broker
SetBroker(i interfaces.Broker)
GetSQLDatabase() interfaces.SQLDatabase
GetMongoDatabase() interfaces.MongoDatabase
GetRedisPool() interfaces.RedisPool
GetKey() interfaces.RSAKey
SetKey(i interfaces.RSAKey)
GetValidator() interfaces.Validator
SetValidator(v interfaces.Validator)
GetExtended(key string) interface{}
AddExtended(key string, value interface{})
}
// Option func type
type Option func(*deps)
type deps struct {
mw interfaces.Middleware
broker interfaces.Broker
sqlDB interfaces.SQLDatabase
mongoDB interfaces.MongoDatabase
redisPool interfaces.RedisPool
key interfaces.RSAKey
validator interfaces.Validator
extended map[string]interface{}
}
var stdDeps = new(deps)
// SetMiddleware option func
func SetMiddleware(mw interfaces.Middleware) Option {
return func(d *deps) {
d.mw = mw
}
}
// SetBroker option func
func SetBroker(broker interfaces.Broker) Option {
return func(d *deps) {
d.broker = broker
}
}
// SetSQLDatabase option func
func SetSQLDatabase(db interfaces.SQLDatabase) Option {
return func(d *deps) {
d.sqlDB = db
}
}
// SetMongoDatabase option func
func SetMongoDatabase(db interfaces.MongoDatabase) Option {
return func(d *deps) {
d.mongoDB = db
}
}
// SetRedisPool option func
func SetRedisPool(db interfaces.RedisPool) Option {
return func(d *deps) {
d.redisPool = db
}
}
// SetKey option func
func SetKey(key interfaces.RSAKey) Option {
return func(d *deps) {
d.key = key
}
}
// SetValidator option func
func SetValidator(validator interfaces.Validator) Option {
return func(d *deps) {
d.validator = validator
}
}
// SetExtended option func
func SetExtended(ext map[string]interface{}) Option {
return func(d *deps) {
d.extended = ext
}
}
// InitDependency constructor
func InitDependency(opts ...Option) Dependency {
for _, o := range opts {
o(stdDeps)
}
return stdDeps
}
func (d *deps) GetMiddleware() interfaces.Middleware {
return d.mw
}
func (d *deps) SetMiddleware(mw interfaces.Middleware) {
d.mw = mw
}
func (d *deps) GetBroker() interfaces.Broker {
return d.broker
}
func (d *deps) SetBroker(b interfaces.Broker) {
d.broker = b
}
func (d *deps) GetSQLDatabase() interfaces.SQLDatabase {
return d.sqlDB
}
func (d *deps) GetMongoDatabase() interfaces.MongoDatabase {
return d.mongoDB
}
func (d *deps) GetRedisPool() interfaces.RedisPool {
return d.redisPool
}
func (d *deps) GetKey() interfaces.RSAKey {
return d.key
}
func (d *deps) SetKey(i interfaces.RSAKey) {
d.key = i
}
func (d *deps) GetValidator() interfaces.Validator {
return d.validator
}
func (d *deps) SetValidator(v interfaces.Validator) {
d.validator = v
}
func (d *deps) GetExtended(key string) interface{} {
return d.extended[key]
}
func (d *deps) AddExtended(key string, value interface{}) {
if d.extended == nil {
d.extended = make(map[string]interface{})
}
d.extended[key] = value
}
// GetMiddleware free function for get middleware
func GetMiddleware() interfaces.Middleware {
return stdDeps.mw
}
// GetBroker free function for get broker
func GetBroker() interfaces.Broker {
return stdDeps.broker
}
// GetSQLDatabase free function for get sql database
func GetSQLDatabase() interfaces.SQLDatabase {
return stdDeps.sqlDB
}
// GetMongoDatabase free function for get mongo database
func GetMongoDatabase() interfaces.MongoDatabase {
return stdDeps.mongoDB
}
// GetRedisPool free function for get redis pool
func GetRedisPool() interfaces.RedisPool {
return stdDeps.redisPool
}
// GetKey free function for get key (RSA)
func GetKey() interfaces.RSAKey {
return stdDeps.key
}
// GetValidator free function for get validator
func GetValidator() interfaces.Validator {
return stdDeps.validator
}
// GetExtended free function for get extended
func GetExtended(key string) interface{} {
return stdDeps.extended[key]
}
// AddExtended free function for add extended
func AddExtended(key string, value interface{}) {
if stdDeps.extended == nil {
stdDeps.extended = make(map[string]interface{})
}
stdDeps.extended[key] = value
}