@just-in/core
Version:
A TypeScript-first framework for building adaptive digital health interventions.
77 lines • 3.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeEventForUsers = executeEventForUsers;
const logger_manager_1 = require("../logger/logger-manager");
const task_manager_1 = require("../handlers/task.manager");
const decision_rule_manager_1 = require("../handlers/decision-rule.manager");
/**
* Executes a registered event against a set of users:
* - calls beforeExecution once per handler
* - runs the handler per user
* - calls afterExecution once per handler
*
* No DB, no queue — pure in-memory execution.
*/
async function executeEventForUsers(event, users, handlerManager) {
var _a;
const handlerNames = handlerManager.getHandlersForEventType(event.eventType);
if (!handlerNames.length) {
logger_manager_1.Log.warn(`No handlers registered for event type "${event.eventType}".`);
return;
}
const beforeRan = new Set();
const afterRan = new Set();
for (const handlerName of handlerNames) {
const task = (0, task_manager_1.getTaskByName)(handlerName);
const rule = (0, decision_rule_manager_1.getDecisionRuleByName)(handlerName);
// BEFORE (once per handler)
if (!beforeRan.has(handlerName)) {
try {
if (task === null || task === void 0 ? void 0 : task.beforeExecution)
await task.beforeExecution(event);
if (rule === null || rule === void 0 ? void 0 : rule.beforeExecution)
await rule.beforeExecution(event);
}
catch (err) {
logger_manager_1.Log.error(`beforeExecution error for "${handlerName}" on event "${event.eventType}": ${err}`);
}
finally {
beforeRan.add(handlerName);
}
}
// PER-USER
for (const user of users) {
const uid = (_a = user.uniqueIdentifier) !== null && _a !== void 0 ? _a : user.id;
try {
if (task) {
await (0, task_manager_1.executeTask)(task, event, user);
}
else if (rule) {
await (0, decision_rule_manager_1.executeDecisionRule)(rule, event, user);
}
else {
logger_manager_1.Log.warn(`Handler "${handlerName}" not found; skipping.`);
}
}
catch (err) {
logger_manager_1.Log.error(`Execution error for "${handlerName}" on user "${uid}" (event "${event.eventType}"): ${err}`);
}
}
// AFTER (once per handler)
if (!afterRan.has(handlerName)) {
try {
if (task === null || task === void 0 ? void 0 : task.afterExecution)
await task.afterExecution(event);
if (rule === null || rule === void 0 ? void 0 : rule.afterExecution)
await rule.afterExecution(event);
}
catch (err) {
logger_manager_1.Log.error(`afterExecution error for "${handlerName}" on event "${event.eventType}": ${err}`);
}
finally {
afterRan.add(handlerName);
}
}
}
}
//# sourceMappingURL=event-executor.js.map