Skip to content

Commit 4543a64

Browse files
committed
added changes to optimize loop
1 parent 272d5f2 commit 4543a64

File tree

2 files changed

+39
-59
lines changed

2 files changed

+39
-59
lines changed

localEvaluation/localEvaluation.go

Lines changed: 35 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,7 @@ func InitializeWithConfig(conf AmplitudeConfig, deploymentKey string) {
9898
}
9999
}
100100

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{})
101+
func fetch(user UserProperties) (*local.EvaluationResult, error) {
112102
userProp := map[string]interface{}{
113103
"org_id": user.OrgId,
114104
"org_name": user.OrgName,
@@ -127,71 +117,61 @@ func fetch(flagKeys []string, user UserProperties, valueOnly bool) map[string]in
127117

128118
result, err := client.EvaluateByOrg(&expUser)
129119
if err != nil {
130-
return variants
120+
return nil, err
121+
}
122+
return result, nil
123+
}
124+
125+
func getValue(flagName string, user UserProperties) local.EvaluationVariant {
126+
result, err := fetch(user)
127+
if err != nil {
128+
fmt.Errorf("error in fetch: %s", err.Error())
129+
}
130+
if result != nil {
131+
if value, ok := (*result)[flagName]; ok {
132+
return value.Variant
133+
}
134+
}
135+
return local.EvaluationVariant{}
136+
}
137+
138+
func getMapOfValue(user UserProperties) map[string]interface{} {
139+
flags := make(map[string]interface{})
140+
result, err := fetch(user)
141+
if err != nil {
142+
fmt.Errorf("error in fetch: %s", err.Error())
131143
}
132-
filter := len(flagKeys) != 0
133144
for k, v := range *result {
134145
if v.IsDefaultVariant {
135146
continue
136147
}
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
147-
}
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-
}
156-
}
157-
}
148+
flags[k] = v.Variant.Key
158149
}
159-
return variants
150+
return flags
160151
}
161152

162153
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 ""
154+
data := getValue(flagName, user)
155+
return data.Key
169156
}
170157

171158
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-
}
159+
data := getValue(flagName, user)
160+
if val, err := strconv.ParseBool(data.Key); err == nil {
161+
return val
178162
}
179163
return false
180164
}
181165

182166
func GetFeatureFlagPayload(flagName string, user UserProperties) map[string]interface{} {
183-
flagKeys := []string{flagName}
184-
data := fetch(flagKeys, user, false)
167+
data := getValue(flagName, user)
185168
mapData := make(map[string]interface{})
186-
if flagData, ok := data[flagName].(AmplitudeVariant); ok {
187-
mapData["value"] = flagData.Value
188-
mapData["payload"] = flagData.Payload
189-
}
169+
mapData["value"] = data.Key
170+
mapData["payload"] = data.Payload
190171
return mapData
191172
}
192173

193174
func GetFeatureFlagByOrg(user UserProperties) map[string]interface{} {
194-
flagKeys := []string{}
195-
data := fetch(flagKeys, user, true)
175+
data := getMapOfValue(user)
196176
return data
197177
}

pkg/experiment/local/types.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
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

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

14-
type EvaluationResult = map[string]flagResult
14+
type EvaluationResult = map[string]FlagResult
1515

1616
type interopResult struct {
1717
Result *EvaluationResult `json:"result,omitempty"`

0 commit comments

Comments
 (0)