@arturwojnar/hermes-mongodb
Version:
Production-Ready TypeScript Outbox Pattern for MongoDB
36 lines • 1.33 kB
JavaScript
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