Skip to content

Commit

Permalink
Merge pull request #510 from fraktalio/feature/latest-version-provide…
Browse files Browse the repository at this point in the history
…r-fix

LatestVersionProvider fix - return Promise
  • Loading branch information
idugalic authored Aug 8, 2023
2 parents f4bcea6 + a9a6ef8 commit 91e5e48
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
11 changes: 8 additions & 3 deletions src/lib/application/eventsourcing-aggregate.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -256,14 +256,14 @@ class EventRepositoryLockingImpl2
}

readonly latestVersionProvider: LatestVersionProvider<EvenNumberEvt, number> =
(_: EvenNumberEvt) =>
async (_: EvenNumberEvt) =>
lockingStorage2.map((it) => it[1])[lockingStorage2.length - 1];

async saveByLatestVersionProvided(
e: EvenNumberEvt,
latestVersionProvider: LatestVersionProvider<EvenNumberEvt, number>
): Promise<readonly [EvenNumberEvt, number]> {
const latestVersion = latestVersionProvider(e);
const latestVersion = await latestVersionProvider(e);
// eslint-disable-next-line functional/no-let
let version;
if (latestVersion) {
Expand All @@ -279,7 +279,12 @@ class EventRepositoryLockingImpl2
latestVersionProvider: LatestVersionProvider<EvenNumberEvt, number>
): Promise<readonly (readonly [EvenNumberEvt, number])[]> {
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;
}
Expand Down
6 changes: 3 additions & 3 deletions src/lib/application/eventsourcing-aggregate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ export class EventSourcingLockingAggregate<C, S, E, V>
return this.eventRepository.fetchEvents(c);
}

latestVersionProvider(e: E): V | null {
async latestVersionProvider(e: E): Promise<V | null> {
return this.eventRepository.latestVersionProvider(e);
}

Expand Down Expand Up @@ -360,7 +360,7 @@ export class EventSourcingOrchestratingLockingAggregate<C, S, E, V>
return this.eventRepository.fetchEvents(c);
}

latestVersionProvider(e: E): V | null {
async latestVersionProvider(e: E): Promise<V | null> {
return this.eventRepository.latestVersionProvider(e);
}

Expand Down Expand Up @@ -444,7 +444,7 @@ export interface EventRepository<C, E> {
readonly saveAll: (eList: readonly E[]) => Promise<readonly E[]>;
}

export type LatestVersionProvider<E, V> = (e: E) => V | null;
export type LatestVersionProvider<E, V> = (e: E) => Promise<V | null>;

/**
* Event Locking repository interface
Expand Down

0 comments on commit 91e5e48

Please sign in to comment.