Skip to content

Commit aa5e889

Browse files
authored
Merge pull request #10 from chandrajeetn/MLE-15719
Mle 15719
2 parents 5e4d736 + 514c67b commit aa5e889

File tree

2 files changed

+34
-63
lines changed

2 files changed

+34
-63
lines changed

localEvaluation/localEvaluation.go

+32-61
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ type AmplitudeConfig struct {
4444
FlagConfigPollerRequestTimeout time.Duration
4545
}
4646

47-
type AmplitudeVariant struct {
48-
Value string `json:"value,omitempty"`
49-
Payload interface{} `json:"payload,omitempty"`
50-
}
51-
5247
func init() {
5348
err := godotenv.Load()
5449
if err != nil {
@@ -98,17 +93,7 @@ func InitializeWithConfig(conf AmplitudeConfig, deploymentKey string) {
9893
}
9994
}
10095

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) {
11297
userProp := map[string]interface{}{
11398
"org_id": user.OrgId,
11499
"org_name": user.OrgName,
@@ -127,71 +112,57 @@ func fetch(flagKeys []string, user UserProperties, valueOnly bool) map[string]in
127112

128113
result, err := client.EvaluateByOrg(&expUser)
129114
if err != nil {
130-
return variants
115+
return nil, err
131116
}
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
147125
}
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
156137
}
138+
flags[k] = v.Variant.Key
157139
}
158140
}
159-
return variants
141+
return flags
160142
}
161143

162144
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
169147
}
170148

171149
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
178153
}
179154
return false
180155
}
181156

182157
func GetFeatureFlagPayload(flagName string, user UserProperties) map[string]interface{} {
183-
flagKeys := []string{flagName}
184-
data := fetch(flagKeys, user, false)
158+
data := getValue(flagName, user)
185159
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
190162
return mapData
191163
}
192164

193165
func GetFeatureFlagByOrg(user UserProperties) map[string]interface{} {
194-
flagKeys := []string{}
195-
data := fetch(flagKeys, user, true)
166+
data := getMapOfValue(user)
196167
return data
197168
}

pkg/experiment/local/types.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package local
22

3-
type evaluationVariant struct {
3+
type EvaluationVariant struct {
44
Key string `json:"key,omitempty"`
55
Payload interface{} `json:"payload,omitempty"`
66
}
77

88
type flagResult struct {
9-
Variant evaluationVariant `json:"variant,omitempty"`
9+
Variant EvaluationVariant `json:"variant,omitempty"`
1010
Description string `json:"description,omitempty"`
1111
IsDefaultVariant bool `json:"isDefaultVariant,omitempty"`
1212
}

0 commit comments

Comments
 (0)