Skip to content

Commit 207b3b6

Browse files
committed
Fixed mapping of optimistic concurrency for PostgreSQL event store
Bumped to 0.12.1
1 parent c6500e2 commit 207b3b6

File tree

9 files changed

+52
-27
lines changed

9 files changed

+52
-27
lines changed

src/package-lock.json

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@event-driven-io/core",
3-
"version": "0.12.0",
3+
"version": "0.12.1",
44
"description": "Emmett - Event Sourcing development made simple",
55
"engines": {
66
"node": ">=20.11.1"

src/packages/emmett-esdb/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@event-driven-io/emmett-esdb",
3-
"version": "0.12.0",
3+
"version": "0.12.1",
44
"description": "Emmett - EventStoreDB - Event Sourcing development made simple",
55
"scripts": {
66
"build": "tsup",
@@ -50,7 +50,7 @@
5050
"@event-driven-io/emmett-testcontainers": "^0.5.0"
5151
},
5252
"peerDependencies": {
53-
"@event-driven-io/emmett": "0.12.0",
53+
"@event-driven-io/emmett": "0.12.1",
5454
"@eventstore/db-client": "^6.1.0"
5555
}
5656
}

src/packages/emmett-expressjs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@event-driven-io/emmett-expressjs",
3-
"version": "0.12.0",
3+
"version": "0.12.1",
44
"description": "Emmett - Event Sourcing development made simple",
55
"scripts": {
66
"build": "tsup",
@@ -48,7 +48,7 @@
4848
"dependencies": {},
4949
"devDependencies": {},
5050
"peerDependencies": {
51-
"@event-driven-io/emmett": "0.12.0",
51+
"@event-driven-io/emmett": "0.12.1",
5252
"@types/express": "4.17.21",
5353
"@types/supertest": "6.0.2",
5454
"express": "4.19.2",

src/packages/emmett-fastify/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@event-driven-io/emmett-fastify",
3-
"version": "0.12.0",
3+
"version": "0.12.1",
44
"description": "Emmett - Event Sourcing development made simple",
55
"scripts": {
66
"build": "tsup",
@@ -52,7 +52,7 @@
5252
"dependencies": {},
5353
"devDependencies": {},
5454
"peerDependencies": {
55-
"@event-driven-io/emmett": "^0.12.0",
55+
"@event-driven-io/emmett": "^0.12.1",
5656
"fastify": "4.26.2",
5757
"@fastify/compress": "7.0.0",
5858
"@fastify/etag": "5.1.0",

src/packages/emmett-postgresql/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@event-driven-io/emmett-postgresql",
3-
"version": "0.12.0",
3+
"version": "0.12.1",
44
"description": "Emmett - PostgreSQL - Event Sourcing development made simple",
55
"scripts": {
66
"build": "tsup",
@@ -52,7 +52,7 @@
5252
"@event-driven-io/emmett-testcontainers": "^0.5.0"
5353
},
5454
"peerDependencies": {
55-
"@event-driven-io/emmett": "0.12.0",
55+
"@event-driven-io/emmett": "0.12.1",
5656
"@types/pg": "^8.11.6",
5757
"@types/pg-format": "^1.0.5",
5858
"pg": "^8.12.0",

src/packages/emmett-postgresql/src/eventStore/schema/appendToStream.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import {
22
JSONParser,
3+
NO_CONCURRENCY_CHECK,
4+
STREAM_DOES_NOT_EXIST,
5+
STREAM_EXISTS,
36
type AppendToStreamOptions,
47
type Event,
8+
type ExpectedStreamVersion,
59
} from '@event-driven-io/emmett';
610
import pg from 'pg';
711
import { v4 as uuid } from 'uuid';
@@ -125,7 +129,11 @@ export const appendToStream = (
125129
streamName,
126130
streamType,
127131
events,
128-
options,
132+
{
133+
expectedStreamVersion: toExpectedVersion(
134+
options?.expectedStreamVersion,
135+
),
136+
},
129137
);
130138
} catch (error) {
131139
if (!isOptimisticConcurrencyError(error)) throw error;
@@ -162,6 +170,22 @@ export const appendToStream = (
162170
};
163171
});
164172

173+
const toExpectedVersion = (
174+
expected: ExpectedStreamVersion | undefined,
175+
): bigint | null => {
176+
if (expected === undefined) return null;
177+
178+
if (expected === NO_CONCURRENCY_CHECK) return null;
179+
180+
// TODO: this needs to be fixed
181+
if (expected == STREAM_DOES_NOT_EXIST) return null;
182+
183+
// TODO: this needs to be fixed
184+
if (expected == STREAM_EXISTS) return null;
185+
186+
return expected as bigint;
187+
};
188+
165189
const isOptimisticConcurrencyError = (error: unknown): boolean =>
166190
error instanceof Error && 'code' in error && error.code === '23505';
167191

@@ -177,7 +201,8 @@ const appendEventsRaw = (
177201
streamId: string,
178202
streamType: string,
179203
events: Event[],
180-
options?: AppendToStreamOptions & {
204+
options?: {
205+
expectedStreamVersion: bigint | null;
181206
partition?: string;
182207
},
183208
): Promise<AppendEventSqlResult> =>

src/packages/emmett-testcontainers/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@event-driven-io/emmett-testcontainers",
3-
"version": "0.12.0",
3+
"version": "0.12.1",
44
"description": "Emmett - TestContainers - Event Sourcing development made simple",
55
"scripts": {
66
"build": "tsup",
@@ -46,7 +46,7 @@
4646
"dist"
4747
],
4848
"dependencies": {
49-
"@event-driven-io/emmett": "0.12.0",
49+
"@event-driven-io/emmett": "0.12.1",
5050
"testcontainers": "^10.7.2"
5151
},
5252
"devDependencies": {

src/packages/emmett/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@event-driven-io/emmett",
3-
"version": "0.12.0",
3+
"version": "0.12.1",
44
"description": "Emmett - Event Sourcing development made simple",
55
"scripts": {
66
"build": "tsup",

0 commit comments

Comments
 (0)