demeine
Version:
DDDD - Distributed Domain Driven Design
31 lines (30 loc) • 1.47 kB
TypeScript
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 {};