/// <summary> /// Make map of featureVariable which are associated with given feature experiment /// </summary> /// <param name="projectConfig">The project config</param> /// <param name="variableIdMap">Map containing variable ID as key and Object of featureVariable</param> /// <param name="experimentId">experimentId of featureExperiment</param> /// <param name="variation">variation</param> /// <returns>Dictionary | Dictionary of FeatureVariable key and value as FeatureVariable object</returns> private IDictionary <string, OptimizelyVariable> MergeFeatureVariables( ProjectConfig projectConfig, IDictionary <string, FeatureVariable> variableIdMap, string experimentId, Variation variation) { var featureId = projectConfig.GetExperimentFeatureList(experimentId)?.FirstOrDefault(); var featureIdVariablesMap = GetFeatureIdVariablesMap(projectConfig); var variablesMap = new Dictionary <string, OptimizelyVariable>(); if (featureId?.Any() ?? false) { variablesMap = featureIdVariablesMap[featureId]?.Select(f => new OptimizelyVariable(f.Id, f.Key, f.Type.ToString().ToLower(), f.DefaultValue) ).ToDictionary(k => k.Key, v => v); foreach (var featureVariableUsage in variation.FeatureVariableUsageInstances) { var defaultVariable = variableIdMap[featureVariableUsage.Id]; var optimizelyVariable = new OptimizelyVariable(featureVariableUsage.Id, defaultVariable.Key, defaultVariable.Type.ToString().ToLower(), variation.IsFeatureEnabled ? featureVariableUsage.Value : defaultVariable.DefaultValue); variablesMap[defaultVariable.Key] = optimizelyVariable; } } return(variablesMap); }
/// <summary> /// Gets Map of all experiments except rollouts /// </summary> /// <param name="projectConfig">The project config</param> /// <returns>Dictionary | Dictionary of experiment key and value as experiment object</returns> private IDictionary <string, OptimizelyExperiment> GetExperimentsMapById(ProjectConfig projectConfig) { var experimentsMap = new Dictionary <string, OptimizelyExperiment>(); var featureVariableIdMap = GetVariableIdMap(projectConfig); var experiments = projectConfig?.Experiments?.ToList(); experiments = projectConfig?.Groups?.SelectMany(g => g.Experiments).Concat(experiments)?.ToList(); foreach (Experiment experiment in experiments) { var featureId = projectConfig.GetExperimentFeatureList(experiment.Id)?.FirstOrDefault(); var variationsMap = GetVariationsMap(experiment.Variations, featureVariableIdMap, featureId); var experimentAudience = GetExperimentAudiences(experiment, projectConfig); var optimizelyExperiment = new OptimizelyExperiment(experiment.Id, experiment.Key, experimentAudience, variationsMap); experimentsMap.Add(experiment.Id, optimizelyExperiment); } return(experimentsMap); }