UNPKG

@arturwojnar/hermes-mongodb

Version:

Production-Ready TypeScript Outbox Pattern for MongoDB

36 lines 1.33 kB
import { assert } from '@arturwojnar/hermes'; import { ObjectId } from 'mongodb'; import { OutboxConsumersCollectionName } from './consts.js'; const getConsumer = async (db, partitionKey) => { const consumers = db.collection(OutboxConsumersCollectionName); let consumer = await consumers.findOne({ partitionKey }); if (!consumer) { consumer = { _id: new ObjectId(), lastProcessedId: null, resumeToken: undefined, partitionKey, lastUpdatedAt: null, createdAt: new Date(), }; await consumers.insertOne(consumer); } const that = { async update(lastProcessedId, resumeToken) { assert(consumer); const { modifiedCount } = await consumers.updateOne({ _id: that._id }, { $set: { lastProcessedId, resumeToken, lastUpdatedAt: new Date() } }); if (!modifiedCount) { throw new Error(`Cant update the consumer ${that._id.toString()}.`); } consumer.lastProcessedId = lastProcessedId; consumer.resumeToken = resumeToken; }, async delete() { await consumers.deleteOne({ _id: that._id }); }, ...consumer, }; return that; }; export { getConsumer }; //# sourceMappingURL=getConsumer.js.map