@@ -34,8 +34,15 @@ struct VariationDecision {
34
34
var cmabUUID : String ?
35
35
}
36
36
37
+ enum OperationType {
38
+ case async
39
+ case sync
40
+ }
41
+
42
+ typealias OPType = OperationType
37
43
typealias UserProfile = OPTUserProfileService . UPProfile
38
44
45
+
39
46
class DefaultDecisionService : OPTDecisionService {
40
47
let bucketer : OPTBucketer
41
48
let userProfileService : OPTUserProfileService
@@ -168,7 +175,7 @@ class DefaultDecisionService: OPTDecisionService {
168
175
user: OptimizelyUserContext ,
169
176
options: [ OptimizelyDecideOption ] ? = nil ,
170
177
userProfileTracker: UserProfileTracker ? ) -> DecisionResponse < Variation > {
171
- let decisionResponse = self . getVariation ( config: config, experiment: experiment, user: user, ignoreCmab : true , userProfileTracker: userProfileTracker)
178
+ let decisionResponse = self . getVariation ( config: config, experiment: experiment, user: user, opType : . sync , userProfileTracker: userProfileTracker)
172
179
173
180
return DecisionResponse ( result: decisionResponse. result? . variation, reasons: decisionResponse. reasons)
174
181
}
@@ -179,14 +186,14 @@ class DefaultDecisionService: OPTDecisionService {
179
186
/// - experiment: The experiment to evaluate.
180
187
/// - user: The user context.
181
188
/// - options: Optional decision options.
182
- /// - ignoreCmab: Flag to skip cmab decision
189
+ /// - opType: Operation type, either sync or async
183
190
/// - userProfileTracker: Optional tracker for user profile data.
184
191
/// - Returns: A `DecisionResponse` with the variation (if any) and decision reasons.
185
192
private func getVariation( config: ProjectConfig ,
186
193
experiment: Experiment ,
187
194
user: OptimizelyUserContext ,
188
195
options: [ OptimizelyDecideOption ] ? = nil ,
189
- ignoreCmab : Bool ,
196
+ opType : OPType ,
190
197
userProfileTracker: UserProfileTracker ? ) -> DecisionResponse < VariationDecision > {
191
198
let reasons = DecisionReasons ( options: options)
192
199
let userId = user. userId
@@ -252,7 +259,10 @@ class DefaultDecisionService: OPTDecisionService {
252
259
// Acquire bucketingId .
253
260
let bucketingId = getBucketingId ( userId: userId, attributes: attributes)
254
261
255
- if experiment. isCmab, !ignoreCmab {
262
+ if experiment. isCmab {
263
+ if opType == . sync {
264
+ /// fixme
265
+ }
256
266
let cmabDecisionResponse = getDecisionForCmabExperiment ( config: config,
257
267
experiment: experiment,
258
268
user: user,
@@ -305,16 +315,16 @@ class DefaultDecisionService: OPTDecisionService {
305
315
user: OptimizelyUserContext ,
306
316
options: [ OptimizelyDecideOption ] ? = nil ) -> DecisionResponse < FeatureDecision > {
307
317
308
- self . getVariationForFeature ( config: config, featureFlag: featureFlag, user: user, ignoreCmab : true , options: options)
318
+ self . getVariationForFeature ( config: config, featureFlag: featureFlag, user: user, opType : . sync , options: options)
309
319
}
310
320
311
321
func getVariationForFeature( config: ProjectConfig ,
312
322
featureFlag: FeatureFlag ,
313
323
user: OptimizelyUserContext ,
314
- ignoreCmab : Bool ,
324
+ opType : OPType ,
315
325
options: [ OptimizelyDecideOption ] ? = nil ) -> DecisionResponse < FeatureDecision > {
316
326
317
- let response = getVariationForFeatureList ( config: config, featureFlags: [ featureFlag] , user: user, ignoreCmab : ignoreCmab , options: options) . first
327
+ let response = getVariationForFeatureList ( config: config, featureFlags: [ featureFlag] , user: user, opType : opType , options: options) . first
318
328
319
329
guard response? . result != nil else {
320
330
let reasons = response? . reasons ?? DecisionReasons ( options: options)
@@ -334,7 +344,7 @@ class DefaultDecisionService: OPTDecisionService {
334
344
func getVariationForFeatureList( config: ProjectConfig ,
335
345
featureFlags: [ FeatureFlag ] ,
336
346
user: OptimizelyUserContext ,
337
- ignoreCmab : Bool = true ,
347
+ opType : OPType = . sync ,
338
348
options: [ OptimizelyDecideOption ] ? = nil ) -> [ DecisionResponse < FeatureDecision > ] {
339
349
340
350
let userId = user. userId
@@ -348,7 +358,7 @@ class DefaultDecisionService: OPTDecisionService {
348
358
var decisions = [ DecisionResponse < FeatureDecision > ] ( )
349
359
350
360
for featureFlag in featureFlags {
351
- let flagDecisionResponse = getDecisionForFlag ( config: config, featureFlag: featureFlag, user: user, userProfileTracker: profileTracker, ignoreCmab : ignoreCmab )
361
+ let flagDecisionResponse = getDecisionForFlag ( config: config, featureFlag: featureFlag, user: user, userProfileTracker: profileTracker, opType : opType )
352
362
decisions. append ( flagDecisionResponse)
353
363
}
354
364
@@ -372,7 +382,7 @@ class DefaultDecisionService: OPTDecisionService {
372
382
featureFlag: FeatureFlag ,
373
383
user: OptimizelyUserContext ,
374
384
userProfileTracker: UserProfileTracker ? = nil ,
375
- ignoreCmab : Bool ,
385
+ opType : OPType ,
376
386
options: [ OptimizelyDecideOption ] ? = nil ) -> DecisionResponse < FeatureDecision > {
377
387
let reasons = DecisionReasons ( options: options)
378
388
@@ -389,7 +399,7 @@ class DefaultDecisionService: OPTDecisionService {
389
399
}
390
400
}
391
401
392
- let flagExpDecision = getVariationForFeatureExperiments ( config: config, featureFlag: featureFlag, user: user, userProfileTracker: userProfileTracker, ignoreCmab : ignoreCmab )
402
+ let flagExpDecision = getVariationForFeatureExperiments ( config: config, featureFlag: featureFlag, user: user, userProfileTracker: userProfileTracker, opType : opType )
393
403
reasons. merge ( flagExpDecision. reasons)
394
404
395
405
if let decision = flagExpDecision. result {
@@ -418,7 +428,7 @@ class DefaultDecisionService: OPTDecisionService {
418
428
featureFlag: FeatureFlag ,
419
429
user: OptimizelyUserContext ,
420
430
userProfileTracker: UserProfileTracker ? = nil ,
421
- ignoreCmab : Bool = true ,
431
+ opType : OPType = . sync ,
422
432
options: [ OptimizelyDecideOption ] ? = nil ) -> DecisionResponse < FeatureDecision > {
423
433
let reasons = DecisionReasons ( options: options)
424
434
@@ -438,7 +448,7 @@ class DefaultDecisionService: OPTDecisionService {
438
448
rule: experiment,
439
449
user: user,
440
450
userProfileTracker: userProfileTracker,
441
- ignoreCmab : ignoreCmab ,
451
+ opType : opType ,
442
452
options: options)
443
453
reasons. merge ( decisionResponse. reasons)
444
454
if let result = decisionResponse. result {
@@ -597,7 +607,7 @@ class DefaultDecisionService: OPTDecisionService {
597
607
rule: Experiment ,
598
608
user: OptimizelyUserContext ,
599
609
userProfileTracker: UserProfileTracker ? ,
600
- ignoreCmab : Bool = true ,
610
+ opType : OPType = . sync ,
601
611
options: [ OptimizelyDecideOption ] ? = nil ) -> DecisionResponse < VariationDecision > {
602
612
let reasons = DecisionReasons ( options: options)
603
613
// check forced-decision first
@@ -614,7 +624,7 @@ class DefaultDecisionService: OPTDecisionService {
614
624
let decisionResponse = getVariation ( config: config,
615
625
experiment: rule,
616
626
user: user,
617
- ignoreCmab : ignoreCmab ,
627
+ opType : opType ,
618
628
userProfileTracker: userProfileTracker)
619
629
let variationResult = decisionResponse. result
620
630
reasons. merge ( decisionResponse. reasons)
0 commit comments