import { Result } from "../common/result"; import { DomainEvent } from "../domain/domain-event"; export interface EventStore { appendEvents(aggregateId: string, expectedVersion: number, events: DomainEvent[]): Promise>; getEvents(aggregateId: string): Promise>; getEventsFromVersion(aggregateId: string, fromVersion: number): Promise>; getEventsByType(eventType: string): Promise>; getEventsByCorrelationId(correlationId: string): Promise>; getEventsInTimeRange(fromDate: Date, toDate: Date): Promise>; } export interface EventStoreEntry { readonly id: string; readonly aggregateId: string; readonly aggregateVersion: number; readonly event: DomainEvent; readonly storedAt: Date; readonly streamName?: string; }