mirror of
https://github.com/formbricks/formbricks.git
synced 2026-01-06 09:00:18 -06:00
fix: adds try...catch in all services (#2494)
Co-authored-by: Matti Nannt <mail@matthiasnannt.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user