UNPKG

@cashfarm/plow

Version:

Library for validating input data and parameters

31 lines (30 loc) 1.2 kB
import { Guid, ConcreteType, Type } from '@cashfarm/lang'; import { AggregateRoot, IAggregateRoot, Identity, IDomainEvent } from '../domain'; import { EventEnvelope } from './eventEnvelope'; export interface IESAggregateRoot<TId extends Identity<any> | Guid> extends IAggregateRoot<TId> { readonly version: number; readonly uncommittedChanges: IDomainEvent[]; markChangesAsCommitted(): void; } /** * Returns a symbol used to created methods that apply events to agrregates * * @export * @param {(DomainEvent & Type)} e * @returns {symbol} */ export declare function Apply(e: IDomainEvent & Type): symbol; /** * Base implementation for an event sourced aggregate root. * * Extend this class and implement `[Apply(EvtClass)]()` methods for * each event of your aggregate. */ export declare class ESAggregateRoot<TId extends Identity<any> | Guid> extends AggregateRoot<TId> { private _version; static load<T extends ESAggregateRoot<any>>(constructor: ConcreteType<T>, events: EventEnvelope[]): T; readonly version: number; readonly uncommittedChanges: IDomainEvent[]; markChangesAsCommitted(): void; protected applyChange(event: IDomainEvent): void; }