-
Notifications
You must be signed in to change notification settings - Fork 1
/
config.go
194 lines (169 loc) · 7.45 KB
/
config.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
package resources
import "time"
// AppConfig is main struct for configuration
type AppConfig struct {
Gateway string `json:",omitempty" mapstructure:"gateway"`
ProjectID string `json:",omitempty"`
Context SectionContext `json:",omitempty"`
HTTPConfig SectionHTTP `json:",omitempty" mapstructure:"httpconfig"`
ConsumerConfig SectionConsumer `json:",omitempty"`
Core SectionCore `json:",omitempty" mapstructure:"core"`
Token SectionToken `json:",omitempty"`
ExternalAPI SectionExternalAPI `json:",omitempty"`
GINMode string `json:",omitempty"`
Log SectionLogger `json:",omitempty"`
Resilience Resilience `json:",omitempty" mapstructure:"resilience"`
LogLevel string `json:",omitempty"`
}
type SectionCore struct {
Kvothe SectionService `json:",omitempty"`
}
// SectionService is a struct for Service Configuration
type SectionService struct {
Name string `json:",omitempty" mapstructure:"name"`
Environment string `json:",omitempty" mapstructure:"environment"`
Version string `json:",omitempty" mapstructure:"version"`
Port string `json:",omitempty" mapstructure:"port"`
Protocol string `json:",omitempty" mapstructure:"protocol"`
Hostname string `json:",omitempty" mapstructure:"hostname"`
Gateway string `json:",omitempty" mapstructure:"gateway"`
LogLevel int `json:",omitempty" mapstructure:"loglevel"`
IsEnable bool `json:",omitempty"`
FirstDB string `json:",omitempty"`
GRPC SectionGRPC `json:",omitempty"`
DBPostgres SectionDB `json:",omitempty" mapstructure:"dbpostgres"`
Redis RedisAccount `json:",omitempty" mapstructure:"redis"`
Timeout SectionTimeout `json:",omitempty"`
AWS SectionAWS `json:",omitempty"`
AppKey string `json:",omitempty"`
DomainFrontend string `json:",omitempty" mapstructure:"domainfrontend"`
JWT SectionJWT `json:",omitempty"`
ExternalJWT SectionJWT `json:",omitempty"`
BasicAuth SectionBasicAuth `json:",omitempty"`
Slack SectionSlack `json:",omitempty"`
MaxProccess int `json:",omitempty"`
}
type SectionGRPC struct {
Port string `json:",omitempty" mapstructure:"port"`
}
type SectionSlack struct {
WebhookURL string `json:"webhook_url,omitempty" mapstructure:"webhookurl"`
WebhookChannel string `json:"webhook_channel,omitempty" mapstructure:"webhookchannel"`
IsEnableSlack bool `json:"is_enable_slack,omitempty" mapstructure:"isenableslack"`
VerificationToken string `json:"verification_token,omitempty" mapstructure:"verificationtoken"`
BotToken string `json:"bot_token,omitempty" mapstructure:"bottoken"`
ChannelID string `json:"channel_id,omitempty" mapstructure:"channelid"`
Icon string `json:"icon,omitempty" mapstructure:"icon"`
}
type Resilience struct {
Retrier Retrier `json:",omitempty" mapstructure:"retrier"`
}
type Retrier struct {
WaitBase time.Duration `json:",omitempty" mapstructure:"waitbase"`
DisableBackoff bool `json:",omitempty" mapstructure:"disablebackoff"`
Times int `json:",omitempty" mapstructure:"times"`
}
type SectionLogger struct {
FileName string `json:",omitempty"`
Mode string `json:",omitempty"`
}
// SectionJWT is a config for JWT
type SectionJWT struct {
JWTSecretKey string `json:",omitempty"`
JWTRefreshSecretKey string `json:",omitempty"`
JWTExpiration int `json:",omitempty"`
JWTRefreshExpiration int `json:",omitempty"`
}
// SectionHTTP is a config for http request
type SectionHTTP struct {
Timeout int `json:",omitempty" mapstructure:"timeout"`
DisableKeepAlive bool `json:",omitempty" mapstructure:"disablekeepalive"`
}
type SectionContext struct {
Timeout int `json:",omitempty"`
}
// SectionConsumer for config consumer
type SectionConsumer struct {
Timeout int `json:",omitempty"`
}
// SectionToken is a config for Token
type SectionToken struct {
TokenKey string `json:",omitempty"`
RefreshTokenKey string `json:",omitempty"`
TokenDaySecond int `json:",omitempty"`
TokenMonthSecond int `json:",omitempty"`
BasicAuth SectionBasicAuth `json:",omitempty"`
}
//SectionTimeout for service timeout in second
type SectionTimeout struct {
Read int `json:",omitempty"`
Write int `json:",omitempty"`
}
type SectionBasicAuth struct {
Username string
Password string
}
type SectionAWS struct {
SES SectionAWSItem `json:",omitempty"`
S3 SectionAWSItem `json:",omitempty"`
}
type SectionAWSItem struct {
AccessKeyID string `json:",omitempty"`
SecretAccessKey string `json:",omitempty"`
DefaultBucket string `json:",omitempty"`
Region string `json:",omitempty"`
ScoutPrefix string `json:",omitempty"`
URL string `json:",omitempty"`
Storage string `json:",omitempty"`
}
type SectionExternalAPI struct {
AWS SectionAWS `json:",omitempty"`
Google SectionGoogle `json:",omitempty"`
Xendit SectionXendit `json:",omitempty"`
Midtrans SectionMidtrans `json:",omitempty"`
}
type SectionGoogle struct {
APIKey string `json:",omitempty"`
}
type SectionXendit struct {
PublicKey string `json:",omitempty"`
APIKey string `json:",omitempty"`
}
type SectionMidtrans struct {
ClientKey string `json:",omitempty"`
APIKey string `json:",omitempty"`
ServerKey string `json:",omitempty"`
MerchantCode string `json:",omitempty"`
}
type RedisAccount struct {
URL string `json:",omitempty" mapstructure:"url"`
Port int `json:",omitempty" mapstructure:"port"`
DB int `json:",omitempty" mapstructure:"db"`
Password string `json:",omitempty" mapstructure:"password"`
PoolSize int `json:",omitempty" mapstructure:"poolsize"`
MinIdleConns int `json:",omitempty" mapstructure:"minidleconns"`
MaxIdle int `json:",omitempty" mapstructure:"maxidle"`
MaxActive int `json:",omitempty" mapstructure:"maxactive"`
MaxConnLifetime int `json:",omitempty" mapstructure:"maxconnlifetime"`
RedisearchIndex []string `json:",omitempty"`
RedisMutexExpiryTime int `json:",omitempty"`
RedisMutexLockTries int `json:",omitempty"`
}
type SectionDB struct {
READ DBAccount `json:",omitempty" mapstructure:"read"`
WRITE DBAccount `json:",omitempty" mapstructure:"write"`
}
// DBAccount is struct for database configuration or database account
type DBAccount struct {
Username string `json:",omitempty" mapstructure:"username"`
Password string `json:",omitempty" mapstructure:"password"`
URL string `json:",omitempty" mapstructure:"url"`
Port string `json:",omitempty" mapstructure:"port"`
DBName string `json:",omitempty" mapstructure:"dbname"`
Flavor string `json:",omitempty" mapstructure:"flavor"`
MaxIdleConns int `json:",omitempty" mapstructure:"maxidleconns"`
MaxOpenConns int `json:",omitempty" mapstructure:"maxopenconns"`
MaxLifeTime int `json:",omitempty" mapstructure:"maxlifetime"`
Location string `json:",omitempty" mapstructure:"location"`
Timeout string `json:",omitempty" mapstructure:"timeout"`
}