@@ -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
162153func 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
171158func 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
182166func 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
193174func GetFeatureFlagByOrg (user UserProperties ) map [string ]interface {} {
194- flagKeys := []string {}
195- data := fetch (flagKeys , user , true )
175+ data := getMapOfValue (user )
196176 return data
197177}
0 commit comments