From d3303a42568fa418f96bf5fafa40a2f6851fc648 Mon Sep 17 00:00:00 2001 From: Oskar Dudycz Date: Mon, 9 Dec 2024 10:20:22 +0100 Subject: [PATCH] Fixed setting streamName and streamPosition on inserting new stream --- src/package-lock.json | 48 +++++++++---------- src/package.json | 2 +- src/packages/emmett-esdb/package.json | 6 +-- src/packages/emmett-expressjs/package.json | 4 +- src/packages/emmett-fastify/package.json | 4 +- src/packages/emmett-mongodb/package.json | 6 +-- .../src/eventStore/mongoDBEventStore.ts | 48 +++++++++---------- src/packages/emmett-postgresql/package.json | 6 +-- src/packages/emmett-shims/package.json | 2 +- .../emmett-testcontainers/package.json | 4 +- src/packages/emmett-tests/package.json | 10 ++-- src/packages/emmett/package.json | 2 +- 12 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index 45933633..97c27a29 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -1,12 +1,12 @@ { "name": "@event-driven-io/core", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@event-driven-io/core", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "workspaces": [ "packages/emmett-shims", "packages/emmett", @@ -11042,7 +11042,7 @@ }, "packages/emmett": { "name": "@event-driven-io/emmett", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "bin": { "emmett": "dist/cli.js" }, @@ -11058,21 +11058,21 @@ }, "packages/emmett-esdb": { "name": "@event-driven-io/emmett-esdb", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "devDependencies": { - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1" + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3" }, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "@eventstore/db-client": "^6.2.1" } }, "packages/emmett-expressjs": { "name": "@event-driven-io/emmett-expressjs", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "devDependencies": {}, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "@types/express": "^4.17.21", "@types/supertest": "^6.0.2", "express": "^4.19.2", @@ -11083,10 +11083,10 @@ }, "packages/emmett-fastify": { "name": "@event-driven-io/emmett-fastify", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "devDependencies": {}, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "@fastify/compress": "^7.0.3", "@fastify/etag": "^5.2.0", "@fastify/formbody": "^7.4.0", @@ -11096,31 +11096,31 @@ }, "packages/emmett-mongodb": { "name": "@event-driven-io/emmett-mongodb", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "devDependencies": { - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1", + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3", "@testcontainers/mongodb": "^10.13.2" }, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "mongodb": "^6.10.0" } }, "packages/emmett-postgresql": { "name": "@event-driven-io/emmett-postgresql", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "devDependencies": { - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1", + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3", "@testcontainers/postgresql": "^10.12.0" }, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "@event-driven-io/pongo": "0.16.4" } }, "packages/emmett-shims": { "name": "@event-driven-io/emmett-shims", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "devDependencies": { "@types/node": "^20.11.30" }, @@ -11139,9 +11139,9 @@ }, "packages/emmett-testcontainers": { "name": "@event-driven-io/emmett-testcontainers", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "dependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "testcontainers": "^10.12.0" }, "devDependencies": { @@ -11150,12 +11150,12 @@ }, "packages/emmett-tests": { "name": "@event-driven-io/emmett-tests", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "devDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", - "@event-driven-io/emmett-esdb": "0.23.0-alpha.1", - "@event-driven-io/emmett-postgresql": "0.23.0-alpha.1", - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", + "@event-driven-io/emmett-esdb": "0.23.0-alpha.3", + "@event-driven-io/emmett-postgresql": "0.23.0-alpha.3", + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3", "@testcontainers/postgresql": "^10.12.0" } } diff --git a/src/package.json b/src/package.json index aa277ace..6b8cab6c 100644 --- a/src/package.json +++ b/src/package.json @@ -1,7 +1,7 @@ { "name": "@event-driven-io/core", "type": "module", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "description": "Emmett - Event Sourcing development made simple", "engines": { "node": ">=20.11.1" diff --git a/src/packages/emmett-esdb/package.json b/src/packages/emmett-esdb/package.json index eefd972d..d7e1fede 100644 --- a/src/packages/emmett-esdb/package.json +++ b/src/packages/emmett-esdb/package.json @@ -1,7 +1,7 @@ { "name": "@event-driven-io/emmett-esdb", "type": "module", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "description": "Emmett - EventStoreDB - Event Sourcing development made simple", "scripts": { "build": "tsup", @@ -48,10 +48,10 @@ ], "dependencies": {}, "devDependencies": { - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1" + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3" }, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "@eventstore/db-client": "^6.2.1" } } diff --git a/src/packages/emmett-expressjs/package.json b/src/packages/emmett-expressjs/package.json index d17fe0fb..22193a94 100644 --- a/src/packages/emmett-expressjs/package.json +++ b/src/packages/emmett-expressjs/package.json @@ -1,6 +1,6 @@ { "name": "@event-driven-io/emmett-expressjs", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "type": "module", "description": "Emmett - Event Sourcing development made simple", "scripts": { @@ -49,7 +49,7 @@ "dependencies": {}, "devDependencies": {}, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "@types/express": "^4.17.21", "@types/supertest": "^6.0.2", "express": "^4.19.2", diff --git a/src/packages/emmett-fastify/package.json b/src/packages/emmett-fastify/package.json index 44376b12..03250572 100644 --- a/src/packages/emmett-fastify/package.json +++ b/src/packages/emmett-fastify/package.json @@ -1,6 +1,6 @@ { "name": "@event-driven-io/emmett-fastify", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "type": "module", "description": "Emmett - Event Sourcing development made simple", "scripts": { @@ -53,7 +53,7 @@ "dependencies": {}, "devDependencies": {}, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "fastify": "^4.28.1", "@fastify/compress": "^7.0.3", "@fastify/etag": "^5.2.0", diff --git a/src/packages/emmett-mongodb/package.json b/src/packages/emmett-mongodb/package.json index cc08bf31..d3ca7b39 100644 --- a/src/packages/emmett-mongodb/package.json +++ b/src/packages/emmett-mongodb/package.json @@ -1,7 +1,7 @@ { "name": "@event-driven-io/emmett-mongodb", "type": "module", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "description": "Emmett - MongoDB - Event Sourcing development made simple", "scripts": { "build": "tsup", @@ -47,11 +47,11 @@ "dist" ], "devDependencies": { - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1", + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3", "@testcontainers/mongodb": "^10.13.2" }, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "mongodb": "^6.10.0" } } diff --git a/src/packages/emmett-mongodb/src/eventStore/mongoDBEventStore.ts b/src/packages/emmett-mongodb/src/eventStore/mongoDBEventStore.ts index c89c4922..9fb49923 100644 --- a/src/packages/emmett-mongodb/src/eventStore/mongoDBEventStore.ts +++ b/src/packages/emmett-mongodb/src/eventStore/mongoDBEventStore.ts @@ -1,6 +1,5 @@ import { ExpectedVersionConflictError, - STREAM_DOES_NOT_EXIST, assertExpectedVersionMatchesCurrent, type AggregateStreamOptions, type AggregateStreamResult, @@ -9,7 +8,6 @@ import { type Event, type EventMetaDataOf, type EventStore, - type ExpectedStreamVersion, type ProjectionRegistration, type ReadEvent, type ReadEventMetadataWithoutGlobalPosition, @@ -85,6 +83,24 @@ export type MongoDBReadEvent = ReadEvent< MongoDBReadEventMetadata >; +export type MongoDBSingleCollectionEventStoreOptions = { + storage: 'SINGLE_COLLECTION'; + collection: string; + projections?: ProjectionRegistration< + 'inline', + MongoDBReadEventMetadata, + MongoDBProjectionInlineHandlerContext + >[]; +} & ( + | { + client: MongoClient; + } + | { + connectionString: string; + clientOptions?: MongoClientOptions; + } +); + export type MongoDBEventStoreOptions = { database?: string; collection?: string; @@ -270,9 +286,12 @@ class MongoDBEventStoreImplementation implements MongoDBEventStore { const now = new Date(); const updates: UpdateFilter = { $push: { messages: { $each: eventsToAppend } }, - $set: { 'metadata.updatedAt': now }, - $inc: { 'metadata.streamPosition': BigInt(events.length) }, + $set: { + 'metadata.updatedAt': now, + 'metadata.streamPosition': currentStreamVersion + BigInt(events.length), + }, $setOnInsert: { + streamName, 'metadata.streamId': streamId, 'metadata.streamType': streamType, 'metadata.createdAt': now, @@ -293,9 +312,7 @@ class MongoDBEventStoreImplementation implements MongoDBEventStore { const updatedStream = await collection.updateOne( { streamName: { $eq: streamName }, - 'metadata.streamPosition': toExpectedVersion( - options?.expectedStreamVersion, - ), + 'metadata.streamPosition': currentStreamVersion, }, updates, { useBigInt64: true, upsert: true }, @@ -367,23 +384,6 @@ export const getMongoDBEventStore = ( options: MongoDBEventStoreOptions, ): MongoDBEventStore => new MongoDBEventStoreImplementation(options); -function toExpectedVersion( - expectedStreamVersion?: ExpectedStreamVersion, -): bigint | undefined { - if (!expectedStreamVersion) return undefined; - - if (typeof expectedStreamVersion === 'string') { - switch (expectedStreamVersion) { - case STREAM_DOES_NOT_EXIST: - return BigInt(0); - default: - return undefined; - } - } - - return expectedStreamVersion; -} - /** * Accepts a `streamType` (the type/category of the event stream) and an `streamId` * (the individual entity/object or aggregate ID) and combines them to a singular diff --git a/src/packages/emmett-postgresql/package.json b/src/packages/emmett-postgresql/package.json index 3d7c42fb..cf77d440 100644 --- a/src/packages/emmett-postgresql/package.json +++ b/src/packages/emmett-postgresql/package.json @@ -1,6 +1,6 @@ { "name": "@event-driven-io/emmett-postgresql", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "type": "module", "description": "Emmett - PostgreSQL - Event Sourcing development made simple", "scripts": { @@ -70,10 +70,10 @@ ], "devDependencies": { "@testcontainers/postgresql": "^10.12.0", - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1" + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3" }, "peerDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "@event-driven-io/pongo": "0.16.4" } } diff --git a/src/packages/emmett-shims/package.json b/src/packages/emmett-shims/package.json index c8905116..0927904c 100644 --- a/src/packages/emmett-shims/package.json +++ b/src/packages/emmett-shims/package.json @@ -1,6 +1,6 @@ { "name": "@event-driven-io/emmett-shims", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "type": "module", "description": "Emmett - Event Sourcing development made simple", "scripts": { diff --git a/src/packages/emmett-testcontainers/package.json b/src/packages/emmett-testcontainers/package.json index 2da55ea8..9b8367f1 100644 --- a/src/packages/emmett-testcontainers/package.json +++ b/src/packages/emmett-testcontainers/package.json @@ -1,6 +1,6 @@ { "name": "@event-driven-io/emmett-testcontainers", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "type": "module", "description": "Emmett - TestContainers - Event Sourcing development made simple", "scripts": { @@ -47,7 +47,7 @@ "dist" ], "dependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", "testcontainers": "^10.12.0" }, "devDependencies": { diff --git a/src/packages/emmett-tests/package.json b/src/packages/emmett-tests/package.json index 689d85b4..4419a996 100644 --- a/src/packages/emmett-tests/package.json +++ b/src/packages/emmett-tests/package.json @@ -2,7 +2,7 @@ "name": "@event-driven-io/emmett-tests", "type": "module", "private": true, - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "description": "Emmett - Internal E2E Tests", "scripts": { "build": "tsup", @@ -55,10 +55,10 @@ "dist" ], "devDependencies": { - "@event-driven-io/emmett": "0.23.0-alpha.1", - "@event-driven-io/emmett-esdb": "0.23.0-alpha.1", - "@event-driven-io/emmett-postgresql": "0.23.0-alpha.1", - "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.1", + "@event-driven-io/emmett": "0.23.0-alpha.3", + "@event-driven-io/emmett-esdb": "0.23.0-alpha.3", + "@event-driven-io/emmett-postgresql": "0.23.0-alpha.3", + "@event-driven-io/emmett-testcontainers": "0.23.0-alpha.3", "@testcontainers/postgresql": "^10.12.0" } } diff --git a/src/packages/emmett/package.json b/src/packages/emmett/package.json index 9cf97144..f8394073 100644 --- a/src/packages/emmett/package.json +++ b/src/packages/emmett/package.json @@ -1,7 +1,7 @@ { "name": "@event-driven-io/emmett", "type": "module", - "version": "0.23.0-alpha.1", + "version": "0.23.0-alpha.3", "description": "Emmett - Event Sourcing development made simple", "scripts": { "build": "tsup",