UNPKG

@just-in/core

Version:

A TypeScript-first framework for building adaptive digital health interventions.

77 lines 3.27 kB
"use strict"; 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