From a9a6ef84f0d4df01cb713d5cad7688f1c999c679 Mon Sep 17 00:00:00 2001 From: Ivan Dugalic Date: Tue, 8 Aug 2023 23:54:27 +0200 Subject: [PATCH] #509 LatestVersionProvider fix - return Promise --- src/lib/application/eventsourcing-aggregate.spec.ts | 11 ++++++++--- src/lib/application/eventsourcing-aggregate.ts | 6 +++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/lib/application/eventsourcing-aggregate.spec.ts b/src/lib/application/eventsourcing-aggregate.spec.ts index 7749aa9..141df09 100644 --- a/src/lib/application/eventsourcing-aggregate.spec.ts +++ b/src/lib/application/eventsourcing-aggregate.spec.ts @@ -256,14 +256,14 @@ class EventRepositoryLockingImpl2 } readonly latestVersionProvider: LatestVersionProvider = - (_: EvenNumberEvt) => + async (_: EvenNumberEvt) => lockingStorage2.map((it) => it[1])[lockingStorage2.length - 1]; async saveByLatestVersionProvided( e: EvenNumberEvt, latestVersionProvider: LatestVersionProvider ): Promise { - const latestVersion = latestVersionProvider(e); + const latestVersion = await latestVersionProvider(e); // eslint-disable-next-line functional/no-let let version; if (latestVersion) { @@ -279,7 +279,12 @@ class EventRepositoryLockingImpl2 latestVersionProvider: LatestVersionProvider ): Promise { const savedEvents: readonly (readonly [EvenNumberEvt, number])[] = - eList.map((e, index) => [e, (latestVersionProvider(e) ?? 0) + index + 1]); + await Promise.all( + eList.map(async (e, index) => [ + e, + ((await latestVersionProvider(e)) ?? 0) + index + 1, + ]) + ); lockingStorage2.concat(savedEvents); return savedEvents; } diff --git a/src/lib/application/eventsourcing-aggregate.ts b/src/lib/application/eventsourcing-aggregate.ts index 2583aa7..4f8c687 100644 --- a/src/lib/application/eventsourcing-aggregate.ts +++ b/src/lib/application/eventsourcing-aggregate.ts @@ -236,7 +236,7 @@ export class EventSourcingLockingAggregate return this.eventRepository.fetchEvents(c); } - latestVersionProvider(e: E): V | null { + async latestVersionProvider(e: E): Promise { return this.eventRepository.latestVersionProvider(e); } @@ -360,7 +360,7 @@ export class EventSourcingOrchestratingLockingAggregate return this.eventRepository.fetchEvents(c); } - latestVersionProvider(e: E): V | null { + async latestVersionProvider(e: E): Promise { return this.eventRepository.latestVersionProvider(e); } @@ -444,7 +444,7 @@ export interface EventRepository { readonly saveAll: (eList: readonly E[]) => Promise; } -export type LatestVersionProvider = (e: E) => V | null; +export type LatestVersionProvider = (e: E) => Promise; /** * Event Locking repository interface