jsinovassin commented on code in PR #659:
URL: https://github.com/apache/unomi/pull/659#discussion_r1579458467
##########
plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PastEventConditionESQueryBuilder.java:
##########
@@ -131,35 +131,77 @@ private Condition getProfileIdsCondition(Set<String> ids,
boolean shouldMatch) {
}
private Condition getProfileConditionForCounter(String
generatedPropertyKey, Integer minimumEventCount, Integer maximumEventCount,
boolean eventsOccurred) {
- String generatedPropertyName = "systemProperties.pastEvents." +
generatedPropertyKey;
+ Condition countCondition = new Condition();
+
+
countCondition.setConditionType(definitionsService.getConditionType("nestedCondition"));
+ countCondition.setParameter("path", "systemProperties.pastEvents");
+
+ Condition subConditionCount = new
Condition(definitionsService.getConditionType("profilePropertyCondition"));
+
+ Condition subConditionKey =
getKeyEqualsCondition(generatedPropertyKey);
+
ConditionType profilePropertyConditionType =
definitionsService.getConditionType("profilePropertyCondition");
if (eventsOccurred) {
- Condition counterIsBetweenBoundaries = new Condition();
-
counterIsBetweenBoundaries.setConditionType(profilePropertyConditionType);
- counterIsBetweenBoundaries.setParameter("propertyName",
generatedPropertyName);
- counterIsBetweenBoundaries.setParameter("comparisonOperator",
"between");
- counterIsBetweenBoundaries.setParameter("propertyValuesInteger",
Arrays.asList(minimumEventCount, maximumEventCount));
- return counterIsBetweenBoundaries;
+ subConditionCount.setParameter("propertyName",
"systemProperties.pastEvents.count");
+ subConditionCount.setParameter("comparisonOperator", "between");
+ subConditionCount.setParameter("propertyValuesInteger",
Arrays.asList(minimumEventCount, maximumEventCount));
+
+ Condition booleanCondition = new
Condition(definitionsService.getConditionType("booleanCondition"));
+ booleanCondition.setParameter("operator", "and");
+ booleanCondition.setParameter("subConditions",
Arrays.asList(subConditionCount, subConditionKey));
+
+ countCondition.setParameter("subCondition", booleanCondition);
+ return countCondition;
+
} else {
- Condition counterMissing = new Condition();
- counterMissing.setConditionType(profilePropertyConditionType);
- counterMissing.setParameter("propertyName", generatedPropertyName);
- counterMissing.setParameter("comparisonOperator", "missing");
-
- Condition counterZero = new Condition();
- counterZero.setConditionType(profilePropertyConditionType);
- counterZero.setParameter("propertyName", generatedPropertyName);
+
+ // 1. Key not present in profile
+ Condition keyNestedCondition = new Condition();
+
keyNestedCondition.setConditionType(definitionsService.getConditionType("nestedCondition"));
+ keyNestedCondition.setParameter("path",
"systemProperties.pastEvents");
+
+ Condition keyEquals = new Condition(profilePropertyConditionType);
+ keyEquals.setParameter("propertyName",
"systemProperties.pastEvents.key");
+ keyEquals.setParameter("comparisonOperator", "equals");
+ keyEquals.setParameter("propertyValue", generatedPropertyKey);
+
+ keyNestedCondition.setParameter("subCondition", keyEquals);
+
+ Condition mustNotExist = new
Condition(definitionsService.getConditionType("notCondition"));
+ mustNotExist.setParameter("subCondition", keyNestedCondition);
+
+ // 2. Key present in profile but value equals to 0
+ Condition counterZero = new
Condition(profilePropertyConditionType);
+ counterZero.setParameter("propertyName",
"systemProperties.pastEvents.count");
counterZero.setParameter("comparisonOperator", "equals");
counterZero.setParameter("propertyValueInteger", 0);
+ Condition keyExistsAndCounterZero = new
Condition(definitionsService.getConditionType("booleanCondition"));
+ keyExistsAndCounterZero.setParameter("operator", "and");
+ keyExistsAndCounterZero.setParameter("subConditions",
Arrays.asList(subConditionKey, counterZero));
+
+ Condition nestedKeyExistsAndCounterZero = new Condition();
+
nestedKeyExistsAndCounterZero.setConditionType(definitionsService.getConditionType("nestedCondition"));
+ nestedKeyExistsAndCounterZero.setParameter("path",
"systemProperties.pastEvents");
+ nestedKeyExistsAndCounterZero.setParameter("subCondition",
keyExistsAndCounterZero);
+
Condition counterCondition = new Condition();
counterCondition.setConditionType(definitionsService.getConditionType("booleanCondition"));
counterCondition.setParameter("operator", "or");
- counterCondition.setParameter("subConditions",
Arrays.asList(counterMissing, counterZero));
+ counterCondition.setParameter("subConditions",
Arrays.asList(mustNotExist, nestedKeyExistsAndCounterZero));
+
return counterCondition;
}
}
+ private Condition getKeyEqualsCondition(String generatedPropertyKey) {
+ Condition subConditionKey = new
Condition(definitionsService.getConditionType("profilePropertyCondition"));
+ subConditionKey.setParameter("propertyName",
"systemProperties.pastEvents.key");
+ subConditionKey.setParameter("comparisonOperator", "equals");
+ subConditionKey.setParameter("propertyValue", generatedPropertyKey);
+ return subConditionKey;
+ }
+
Review Comment:
Updated!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]