function trackCustomObjectMetrics(payload) {
const { eventType, eventData, actor } = payload;
const [, , objectType, action] = eventType.split(":");
// Track object lifecycle metrics
trackEvent(`custom_object_${action}`, {
objectType,
organizationId: payload.orgId,
userId: actor.id,
timestamp: payload.timestamp,
});
// Object-specific metrics
if (objectType === "deal") {
trackDealMetrics(action, eventData);
} else if (objectType === "project") {
trackProjectMetrics(action, eventData);
}
// User activity metrics
updateUserActivityScore(actor.id, {
action: `${objectType}_${action}`,
weight: getActionWeight(action),
timestamp: payload.timestamp,
});
}
function trackDealMetrics(action, eventData) {
const deal = eventData.deal || eventData.previousDeal;
switch (action) {
case "created":
trackMetric("deal_created", {
value: deal.value,
stage: deal.stage,
source: deal.customFields?.deal_source,
});
break;
case "updated":
if (eventData.changedFields?.includes("stage")) {
trackMetric("deal_stage_changed", {
fromStage: eventData.previousDeal?.stage,
toStage: deal.stage,
value: deal.value,
});
}
break;
case "deleted":
trackMetric("deal_deleted", {
stage: deal.stage,
value: deal.value,
reason: eventData.deletionReason,
});
break;
}
}