fix: adds try...catch in all services (#2494)

Co-authored-by: Matti Nannt <mail@matthiasnannt.com>
This commit is contained in:
Piyush Gupta
2024-04-22 12:45:37 +05:30
committed by GitHub
parent ed509d3a9a
commit 4ee27f9618
33 changed files with 1686 additions and 1229 deletions

View File

@@ -519,13 +519,17 @@ const evaluateActionFilter = async (
return false;
}
// we have the action metric and we'll need to find out the values for those metrics from the db
const actionValue = await getResolvedActionValue(actionClassId, personId, metric);
try {
// we have the action metric and we'll need to find out the values for those metrics from the db
const actionValue = await getResolvedActionValue(actionClassId, personId, metric);
const actionResult =
actionValue !== undefined && compareValues(actionValue ?? 0, value, qualifier.operator);
const actionResult =
actionValue !== undefined && compareValues(actionValue ?? 0, value, qualifier.operator);
return actionResult;
return actionResult;
} catch (error) {
throw error;
}
};
const evaluateSegmentFilter = async (
@@ -611,88 +615,92 @@ export const evaluateSegment = async (
): Promise<boolean> => {
let resultPairs: ResultConnectorPair[] = [];
for (let filterItem of filters) {
const { resource } = filterItem;
try {
for (let filterItem of filters) {
const { resource } = filterItem;
let result: boolean;
let result: boolean;
if (isResourceFilter(resource)) {
const { root } = resource;
const { type } = root;
if (isResourceFilter(resource)) {
const { root } = resource;
const { type } = root;
if (type === "attribute") {
result = evaluateAttributeFilter(userData.attributes, resource as TSegmentAttributeFilter);
if (type === "attribute") {
result = evaluateAttributeFilter(userData.attributes, resource as TSegmentAttributeFilter);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "person") {
result = evaluatePersonFilter(userData.userId, resource as TSegmentPersonFilter);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "action") {
result = await evaluateActionFilter(
userData.actionIds,
resource as TSegmentActionFilter,
userData.personId
);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "segment") {
result = await evaluateSegmentFilter(userData, resource as TSegmentSegmentFilter);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "device") {
result = evaluateDeviceFilter(userData.deviceType, resource as TSegmentDeviceFilter);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
} else {
result = await evaluateSegment(userData, resource);
// this is a sub-group and we need to evaluate the sub-group
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "person") {
result = evaluatePersonFilter(userData.userId, resource as TSegmentPersonFilter);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "action") {
result = await evaluateActionFilter(
userData.actionIds,
resource as TSegmentActionFilter,
userData.personId
);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "segment") {
result = await evaluateSegmentFilter(userData, resource as TSegmentSegmentFilter);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
if (type === "device") {
result = evaluateDeviceFilter(userData.deviceType, resource as TSegmentDeviceFilter);
resultPairs.push({
result,
connector: filterItem.connector,
});
}
} else {
result = await evaluateSegment(userData, resource);
// this is a sub-group and we need to evaluate the sub-group
resultPairs.push({
result,
connector: filterItem.connector,
});
}
}
if (!resultPairs.length) {
return false;
}
// Given that the first filter in every group/sub-group always has a connector value of "null",
// we initialize the finalResult with the result of the first filter.
let finalResult = resultPairs[0].result;
for (let i = 1; i < resultPairs.length; i++) {
const { result, connector } = resultPairs[i];
if (connector === "and") {
finalResult = finalResult && result;
} else if (connector === "or") {
finalResult = finalResult || result;
if (!resultPairs.length) {
return false;
}
}
return finalResult;
// Given that the first filter in every group/sub-group always has a connector value of "null",
// we initialize the finalResult with the result of the first filter.
let finalResult = resultPairs[0].result;
for (let i = 1; i < resultPairs.length; i++) {
const { result, connector } = resultPairs[i];
if (connector === "and") {
finalResult = finalResult && result;
} else if (connector === "or") {
finalResult = finalResult || result;
}
}
return finalResult;
} catch (error) {
throw error;
}
};