@@ -44,11 +44,6 @@ type AmplitudeConfig struct {
44
44
FlagConfigPollerRequestTimeout time.Duration
45
45
}
46
46
47
- type AmplitudeVariant struct {
48
- Value string `json:"value,omitempty"`
49
- Payload interface {} `json:"payload,omitempty"`
50
- }
51
-
52
47
func init () {
53
48
err := godotenv .Load ()
54
49
if err != nil {
@@ -98,17 +93,7 @@ func InitializeWithConfig(conf AmplitudeConfig, deploymentKey string) {
98
93
}
99
94
}
100
95
101
- func contains (s []string , e string ) bool {
102
- for _ , a := range s {
103
- if a == e {
104
- return true
105
- }
106
- }
107
- return false
108
- }
109
-
110
- func fetch (flagKeys []string , user UserProperties , valueOnly bool ) map [string ]interface {} {
111
- variants := make (map [string ]interface {})
96
+ func fetch (user UserProperties ) (* local.EvaluationResult , error ) {
112
97
userProp := map [string ]interface {}{
113
98
"org_id" : user .OrgId ,
114
99
"org_name" : user .OrgName ,
@@ -127,71 +112,57 @@ func fetch(flagKeys []string, user UserProperties, valueOnly bool) map[string]in
127
112
128
113
result , err := client .EvaluateByOrg (& expUser )
129
114
if err != nil {
130
- return variants
115
+ return nil , err
131
116
}
132
- filter := len (flagKeys ) != 0
133
- for k , v := range * result {
134
- if v .IsDefaultVariant {
135
- continue
136
- }
137
- if ! filter {
138
- if valueOnly {
139
- variants [k ] = v .Variant .Key
140
- } else {
141
- variants [k ] = AmplitudeVariant {
142
- Value : v .Variant .Key ,
143
- Payload : v .Variant .Payload ,
144
- }
145
- }
146
- continue
117
+ return result , nil
118
+ }
119
+
120
+ func getValue (flagName string , user UserProperties ) local.EvaluationVariant {
121
+ result , _ := fetch (user )
122
+ if result != nil && * result != nil {
123
+ if value , ok := (* result )[flagName ]; ok {
124
+ return value .Variant
147
125
}
148
- if contains (flagKeys , k ) {
149
- if valueOnly {
150
- variants [k ] = v .Variant .Key
151
- } else {
152
- variants [k ] = AmplitudeVariant {
153
- Value : v .Variant .Key ,
154
- Payload : v .Variant .Payload ,
155
- }
126
+ }
127
+ return local.EvaluationVariant {}
128
+ }
129
+
130
+ func getMapOfValue (user UserProperties ) map [string ]interface {} {
131
+ flags := make (map [string ]interface {})
132
+ result , _ := fetch (user )
133
+ if result != nil && * result != nil {
134
+ for k , v := range * result {
135
+ if v .IsDefaultVariant {
136
+ continue
156
137
}
138
+ flags [k ] = v .Variant .Key
157
139
}
158
140
}
159
- return variants
141
+ return flags
160
142
}
161
143
162
144
func GetFeatureFlagString (flagName string , user UserProperties ) string {
163
- flagKeys := []string {flagName }
164
- data := fetch (flagKeys , user , false )
165
- if flagData , ok := data [flagName ].(AmplitudeVariant ); ok {
166
- return flagData .Value
167
- }
168
- return ""
145
+ data := getValue (flagName , user )
146
+ return data .Key
169
147
}
170
148
171
149
func GetFeatureFlagBool (flagName string , user UserProperties ) bool {
172
- flagKeys := []string {flagName }
173
- data := fetch (flagKeys , user , false )
174
- if flagData , ok := data [flagName ].(AmplitudeVariant ); ok {
175
- if val , err := strconv .ParseBool (flagData .Value ); err == nil {
176
- return val
177
- }
150
+ data := getValue (flagName , user )
151
+ if val , err := strconv .ParseBool (data .Key ); err == nil {
152
+ return val
178
153
}
179
154
return false
180
155
}
181
156
182
157
func GetFeatureFlagPayload (flagName string , user UserProperties ) map [string ]interface {} {
183
- flagKeys := []string {flagName }
184
- data := fetch (flagKeys , user , false )
158
+ data := getValue (flagName , user )
185
159
mapData := make (map [string ]interface {})
186
- if flagData , ok := data [flagName ].(AmplitudeVariant ); ok {
187
- mapData ["value" ] = flagData .Value
188
- mapData ["payload" ] = flagData .Payload
189
- }
160
+ mapData ["value" ] = data .Key
161
+ mapData ["payload" ] = data .Payload
190
162
return mapData
191
163
}
192
164
193
165
func GetFeatureFlagByOrg (user UserProperties ) map [string ]interface {} {
194
- flagKeys := []string {}
195
- data := fetch (flagKeys , user , true )
166
+ data := getMapOfValue (user )
196
167
return data
197
168
}
0 commit comments