resolve-local-event-broker
Version:
The reSolve framework's event broker for applications on a local machine.
77 lines (70 loc) • 2.62 kB
JavaScript
;
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