UNPKG

demeine

Version:

DDDD - Distributed Domain Driven Design

31 lines (30 loc) 1.47 kB
import Promise from 'bluebird'; import { Aggregate } from '../aggregate'; import { Event } from '../aggregate/Aggregate.interfaces'; import { Callback, Commit } from './Repository.interfaces'; export interface AggregateSnapshot<State extends object = object> { id?: string; snapshot?: State; version?: number; } interface QueryStreamResponse<State extends object = object, Payload extends object = object> { commits: Array<Commit<Payload>>; snapshot?: AggregateSnapshot<State>; } export interface Stream<Payload extends object = object> { append(event: Event<Payload>): Promise<Array<Commit<Payload>>>; commit(id: string): Promise<void>; getCommittedEvents(): Array<Event<Payload>>; getVersion(): number; _version: number; } export interface Partition<T extends Aggregate = Aggregate, Payload extends object = object> { delete(id: string, event: Event<Payload>): Promise<T>; loadSnapshot?(id: string): Promise<AggregateSnapshot<T['_state']> | null>; openStream(id: string, isWriteOnly?: boolean): Promise<Stream<Payload>>; queryStream?(id: string, version: number, callback?: Callback<Array<Commit<Payload>>>): Promise<Array<Commit<Payload>>>; queryStreamWithSnapshot?(id: string): Promise<QueryStreamResponse<T['_state'], Payload>>; removeSnapshot?(id: string): Promise<void>; storeSnapshot?(id: string, state?: T['_state'], version?: number): Promise<void>; } export {};