Skip to content

Commit 2baa839

Browse files
committed
simplify
1 parent 0b81763 commit 2baa839

File tree

3 files changed

+14
-85
lines changed

3 files changed

+14
-85
lines changed

pkg/config/datafileprojectconfig/mappers/holdout.go

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -43,63 +43,13 @@ func MapHoldouts(holdouts []datafileEntities.Holdout, audienceMap map[string]ent
4343
}
4444

4545
for _, datafileHoldout := range holdouts {
46-
// Map variations similar to experiments
47-
variationMap := make(map[string]entities.Variation)
48-
variationKeyToIDMap := make(map[string]string)
49-
50-
for _, variation := range datafileHoldout.Variations {
51-
variableMap := make(map[string]entities.VariationVariable)
52-
for _, variable := range variation.Variables {
53-
variableMap[variable.ID] = entities.VariationVariable{
54-
ID: variable.ID,
55-
Value: variable.Value,
56-
}
57-
}
58-
59-
v := entities.Variation{
60-
ID: variation.ID,
61-
Key: variation.Key,
62-
FeatureEnabled: variation.FeatureEnabled,
63-
Variables: variableMap,
64-
}
65-
variationMap[variation.ID] = v
66-
variationKeyToIDMap[variation.Key] = variation.ID
67-
}
68-
69-
// Map traffic allocation
70-
trafficAllocation := []entities.Range{}
71-
for _, allocation := range datafileHoldout.TrafficAllocation {
72-
trafficAllocation = append(trafficAllocation, entities.Range{
73-
EntityID: allocation.EntityID,
74-
EndOfRange: allocation.EndOfRange,
75-
})
76-
}
77-
78-
// Build audience condition tree
79-
var audienceConditionTree *entities.TreeNode
80-
if datafileHoldout.AudienceConditions != nil {
81-
audienceConditionTree, _, _ = buildConditionTree(datafileHoldout.AudienceConditions)
82-
} else if len(datafileHoldout.AudienceIds) > 0 {
83-
// Build from audience IDs similar to experiments
84-
audienceConditionTree, _ = buildAudienceConditionTree(datafileHoldout.AudienceIds)
85-
}
86-
87-
// Convert status string to HoldoutStatus type
88-
status := entities.HoldoutStatus(datafileHoldout.Status)
89-
90-
// Create the runtime holdout entity
46+
// Create minimal runtime holdout entity - only what's needed for flag dependency
9147
holdout := entities.Holdout{
92-
ID: datafileHoldout.ID,
93-
Key: datafileHoldout.Key,
94-
Status: status,
95-
Variations: variationMap,
96-
VariationKeyToIDMap: variationKeyToIDMap,
97-
TrafficAllocation: trafficAllocation,
98-
AudienceIds: datafileHoldout.AudienceIds,
99-
AudienceConditions: datafileHoldout.AudienceConditions,
100-
AudienceConditionTree: audienceConditionTree,
101-
IncludedFlags: datafileHoldout.IncludedFlags,
102-
ExcludedFlags: datafileHoldout.ExcludedFlags,
48+
ID: datafileHoldout.ID,
49+
Key: datafileHoldout.Key,
50+
Status: entities.HoldoutStatus(datafileHoldout.Status),
51+
IncludedFlags: datafileHoldout.IncludedFlags,
52+
ExcludedFlags: datafileHoldout.ExcludedFlags,
10353
}
10454

10555
// Add to ID map

pkg/config/datafileprojectconfig/mappers/holdout_test.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,12 @@ import (
2525
)
2626

2727
func TestMapHoldouts(t *testing.T) {
28-
// Create test holdouts
28+
// Create test holdouts - minimal fields only
2929
holdouts := []datafileEntities.Holdout{
3030
{
3131
ExperimentCore: datafileEntities.ExperimentCore{
3232
ID: "holdout_1",
3333
Key: "global_holdout",
34-
Variations: []datafileEntities.Variation{
35-
{ID: "var1", Key: "control"},
36-
{ID: "var2", Key: "treatment"},
37-
},
38-
TrafficAllocation: []datafileEntities.TrafficAllocation{
39-
{EntityID: "var1", EndOfRange: 5000},
40-
{EntityID: "var2", EndOfRange: 10000},
41-
},
42-
AudienceIds: []string{"audience1"},
4334
},
4435
Status: datafileEntities.HoldoutStatusRunning,
4536
IncludedFlags: []string{}, // Global holdout
@@ -49,12 +40,6 @@ func TestMapHoldouts(t *testing.T) {
4940
ExperimentCore: datafileEntities.ExperimentCore{
5041
ID: "holdout_2",
5142
Key: "feature_specific_holdout",
52-
Variations: []datafileEntities.Variation{
53-
{ID: "var3", Key: "variant_a"},
54-
},
55-
TrafficAllocation: []datafileEntities.TrafficAllocation{
56-
{EntityID: "var3", EndOfRange: 10000},
57-
},
5843
},
5944
Status: datafileEntities.HoldoutStatusRunning,
6045
IncludedFlags: []string{"feature_1", "feature_2"},

pkg/entities/experiment.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,12 @@ const (
7474
HoldoutStatusArchived HoldoutStatus = "Archived"
7575
)
7676

77-
// Holdout represents a holdout experiment that can be applied to feature flags
78-
// Holdouts share core bucketing logic with experiments but add flag-specific targeting
77+
// Holdout represents a holdout that can be applied to feature flags
78+
// Contains only the minimal information needed to establish flag dependencies
7979
type Holdout struct {
80-
ID string
81-
Key string
82-
Status HoldoutStatus
83-
Variations map[string]Variation // keyed by variation ID
84-
VariationKeyToIDMap map[string]string
85-
TrafficAllocation []Range
86-
AudienceIds []string
87-
AudienceConditions interface{}
88-
AudienceConditionTree *TreeNode
89-
IncludedFlags []string // Flag IDs this holdout specifically includes
90-
ExcludedFlags []string // Flag IDs this holdout specifically excludes
80+
ID string
81+
Key string
82+
Status HoldoutStatus
83+
IncludedFlags []string // Flag IDs this holdout specifically includes
84+
ExcludedFlags []string // Flag IDs this holdout specifically excludes
9185
}

0 commit comments

Comments
 (0)