Skip to content

Commit 93c261e

Browse files
authored
feat: implemented-implicit-identity-key (#211)
1 parent 798995f commit 93c261e

File tree

5 files changed

+18
-7
lines changed

5 files changed

+18
-7
lines changed

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "tests/engine/engine-tests/engine-test-data"]
22
path = tests/engine/engine-tests/engine-test-data
33
url = [email protected]:Flagsmith/engine-test-data.git
4-
branch = v3.0.0
4+
branch = v3.1.0

flagsmith-engine/evaluation/evaluationContext/mappers.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,16 @@ function mapIdentityModelToIdentityContext(
116116
traitsContext[trait.traitKey] = trait.traitValue;
117117
}
118118

119-
return {
119+
const identityContext: IdentityContext = {
120120
identifier: identity.identifier,
121-
key: identity.djangoID?.toString() || identity.compositeKey,
122121
traits: traitsContext
123122
};
123+
124+
if (identity.djangoID !== undefined) {
125+
identityContext.key = identity.djangoID.toString();
126+
}
127+
128+
return identityContext;
124129
}
125130

126131
function mapSegmentRuleModelToRule(rule: any): any {

flagsmith-engine/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
CustomFeatureMetadata,
77
FlagResultWithMetadata
88
} from './evaluation/models.js';
9-
import { getIdentitySegments } from './segments/evaluators.js';
9+
import { getIdentitySegments, getIdentityKey } from './segments/evaluators.js';
1010
import { EvaluationResultFlags } from './evaluation/models.js';
1111
import { TARGETING_REASONS } from './features/types.js';
1212
import { getHashedPercentageForObjIds } from './utils/hashing/index.js';
@@ -131,7 +131,7 @@ export function evaluateFeatures(
131131

132132
const { value: evaluatedValue, reason: evaluatedReason } = hasOverride
133133
? { value: finalFeature.value, reason: undefined }
134-
: evaluateFeatureValue(finalFeature, context.identity?.key);
134+
: evaluateFeatureValue(finalFeature, getIdentityKey(context));
135135

136136
flags[finalFeature.name] = {
137137
name: finalFeature.name,

flagsmith-engine/segments/evaluators.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export function traitsMatchSegmentCondition(
4949
): boolean {
5050
if (condition.operator === PERCENTAGE_SPLIT) {
5151
const contextValueKey =
52-
getContextValue(condition.property, context) || context?.identity?.key;
52+
getContextValue(condition.property, context) || getIdentityKey(context);
5353
const hashedPercentage = getHashedPercentageForObjIds([segmentKey, contextValueKey]);
5454
return hashedPercentage <= parseFloat(String(condition.value));
5555
}
@@ -173,3 +173,9 @@ export function getContextValue(jsonPath: string, context?: GenericEvaluationCon
173173
return undefined;
174174
}
175175
}
176+
177+
export function getIdentityKey(context?: GenericEvaluationContext): string | undefined {
178+
if (!context?.identity) return undefined;
179+
180+
return context.identity.key || `${context.environment.key}_${context.identity.identifier}`;
181+
}

0 commit comments

Comments
 (0)