@@ -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-
5247func 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
162144func 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
171149func 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
182157func 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
193165func GetFeatureFlagByOrg (user UserProperties ) map [string ]interface {} {
194- flagKeys := []string {}
195- data := fetch (flagKeys , user , true )
166+ data := getMapOfValue (user )
196167 return data
197168}
0 commit comments