From a6a303f256e9feb8a638f5c30dd5d78e8bf23f8a Mon Sep 17 00:00:00 2001 From: Pablo Baleztena Date: Mon, 14 Oct 2024 09:55:39 -0300 Subject: [PATCH] [fabric/domain] Refactor EventStore interface and remove EventStream --- .../fabric/domain/src/events/event-store.ts | 26 +++++++++++++------ .../fabric/domain/src/events/event-stream.ts | 16 ------------ packages/fabric/domain/src/events/event.ts | 5 ++++ packages/fabric/domain/src/events/index.ts | 1 - 4 files changed, 23 insertions(+), 25 deletions(-) delete mode 100644 packages/fabric/domain/src/events/event-stream.ts diff --git a/packages/fabric/domain/src/events/event-store.ts b/packages/fabric/domain/src/events/event-store.ts index 0e31fc1..549031f 100644 --- a/packages/fabric/domain/src/events/event-store.ts +++ b/packages/fabric/domain/src/events/event-store.ts @@ -1,21 +1,31 @@ -import { AsyncResult, PosixDate } from "@fabric/core"; +import { AsyncResult, MaybePromise, PosixDate } from "@fabric/core"; import { StoreQueryError } from "../errors/query-error.js"; -import { EventsFromStream, EventStream } from "./event-stream.js"; +import { UUID } from "../types/uuid.js"; +import { Event, EventFromKey } from "./event.js"; import { StoredEvent } from "./stored-event.js"; -export interface EventStore { +export interface EventStore { /** * Store a new event in the event store. */ - append< - TStreamKey extends TEventStream["name"], - T extends EventsFromStream, - >( - streamName: TStreamKey, + append( event: T, ): AsyncResult, StoreQueryError>; + + getEventsFromStream( + streamId: UUID, + ): AsyncResult[], StoreQueryError>; + + subscribe( + events: TEventKey[], + subscriber: EventSubscriber>, + ): void; } +export type EventSubscriber = ( + event: StoredEvent, +) => MaybePromise; + export interface EventFilterOptions { fromDate?: PosixDate; toDate?: PosixDate; diff --git a/packages/fabric/domain/src/events/event-stream.ts b/packages/fabric/domain/src/events/event-stream.ts deleted file mode 100644 index 9b70954..0000000 --- a/packages/fabric/domain/src/events/event-stream.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { AsyncResult } from "@fabric/core"; -import { UUID } from "../types/uuid.js"; -import { Event } from "./event.js"; -import { StoredEvent } from "./stored-event.js"; - -export interface EventStream< - TName extends string = string, - TEvent extends Event = Event, -> { - id: UUID; - name: TName; - append(event: Event): AsyncResult>; -} - -export type EventsFromStream = - T extends EventStream ? TEvent : never; diff --git a/packages/fabric/domain/src/events/event.ts b/packages/fabric/domain/src/events/event.ts index e314103..d71ef0a 100644 --- a/packages/fabric/domain/src/events/event.ts +++ b/packages/fabric/domain/src/events/event.ts @@ -10,3 +10,8 @@ export interface Event { readonly streamId: UUID; readonly payload: TPayload; } + +export type EventFromKey< + TEvents extends Event, + TKey extends TEvents["type"], +> = Extract; diff --git a/packages/fabric/domain/src/events/index.ts b/packages/fabric/domain/src/events/index.ts index 7b181cc..a6fc9bd 100644 --- a/packages/fabric/domain/src/events/index.ts +++ b/packages/fabric/domain/src/events/index.ts @@ -1,4 +1,3 @@ export * from "./event-store.js"; -export * from "./event-stream.js"; export * from "./event.js"; export * from "./stored-event.js";