demeine
Version:
DDDD - Distributed Domain Driven Design
31 lines (30 loc) • 1.02 kB
TypeScript
import { Aggregate } from './Aggregate';
export interface ApplyFunc<State extends object = object> {
(event: Event): void;
}
export interface Command<Payload extends object = object> {
type: string;
payload: Payload;
id?: string;
aggregateType?: string;
aggregateId?: string;
}
export interface CommandHandler<State extends object = object> {
handle(aggregate: Aggregate<State>, command: Command): Aggregate<State>;
}
export interface CommandSink<State extends object = object> {
sink(cmd: Command, aggregate: Aggregate<State>): Promise<Aggregate<State>>;
}
export interface Event<Payload extends object = object> {
type: string;
payload: Payload;
id?: string;
aggregateId?: string;
correlationId?: string;
}
export interface EventHandler<State extends object = object> {
handle(aggregate: Aggregate<State>, event: Event): void;
}
export interface ProcessFunc<State extends object = object> {
(command: Command): Aggregate<State>;
}