UNPKG

resolve-local-event-broker

Version:

The reSolve framework's event broker for applications on a local machine.

77 lines (70 loc) 2.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _constants = require("../constants"); const pullNotificationsAsBatchForSubscriber = async (pool, payload) => { const { database: { escapeStr, escapeId, runQuery, runRawQuery }, parseSubscription, invokeOperation, generateGuid } = pool; const { subscriptionId } = payload; const notificationsTableNameAsId = escapeId(_constants.NOTIFICATIONS_TABLE_NAME); const subscribersTableNameAsId = escapeId(_constants.SUBSCRIBERS_TABLE_NAME); const batchId = generateGuid(subscriptionId); await runRawQuery(` UPDATE ${notificationsTableNameAsId} SET "processStartTimestamp" = CAST(strftime('%s','now') || substr(strftime('%f','now'),4) AS ${_constants.LONG_INTEGER_SQL_TYPE}), "heartbeatTimestamp" = CAST(strftime('%s','now') || substr(strftime('%f','now'),4) AS ${_constants.LONG_INTEGER_SQL_TYPE}), "batchId" = ${escapeStr(batchId)} WHERE ${notificationsTableNameAsId}."subscriptionId" = ${escapeStr(subscriptionId)} AND NOT EXISTS ( SELECT "N".* FROM ${notificationsTableNameAsId} "N" WHERE "N"."subscriptionId" = ${escapeStr(subscriptionId)} AND "N"."batchId" IS NOT NULL ) AND EXISTS ( SELECT "S".* FROM ${subscribersTableNameAsId} "S" WHERE "S"."subscriptionId" = ${escapeStr(subscriptionId)} ); COMMIT; BEGIN IMMEDIATE; `); const affectedNotifications = await runQuery(` SELECT ${subscribersTableNameAsId}."subscriptionId" AS "subscriptionId", ${subscribersTableNameAsId}."eventSubscriber" AS "eventSubscriber" FROM ${notificationsTableNameAsId} LEFT JOIN ${subscribersTableNameAsId} ON ${subscribersTableNameAsId}."subscriptionId" = ${notificationsTableNameAsId}."subscriptionId" WHERE ${subscribersTableNameAsId}."subscriptionId" = ${escapeStr(subscriptionId)} AND ${notificationsTableNameAsId}."batchId" = ${escapeStr(batchId)} LIMIT 1 `); if (affectedNotifications == null || affectedNotifications.length < 1) { return; } const activeBatch = await parseSubscription({ ...affectedNotifications[0], batchId }); const input = { type: _constants.PrivateOperationType.DELIVER_BATCH, payload: { activeBatch } }; await invokeOperation(pool, _constants.LazinessStrategy.EAGER, input); }; var _default = pullNotificationsAsBatchForSubscriber; exports.default = _default; //# sourceMappingURL=pull-notifications-as-batch-for-subscriber.js.map