A social knowledge tool for researchers built on ATProto
1import { Entity } from './Entity'; 2import { IDomainEvent } from './events/IDomainEvent'; 3import { UniqueEntityID } from './UniqueEntityID'; 4 5export abstract class AggregateRoot<T> extends Entity<T> { 6 private _domainEvents: IDomainEvent[] = []; 7 8 get id(): UniqueEntityID { 9 return this._id; 10 } 11 12 get domainEvents(): IDomainEvent[] { 13 return this._domainEvents; 14 } 15 16 protected addDomainEvent(domainEvent: IDomainEvent): void { 17 this._domainEvents.push(domainEvent); 18 this.logDomainEventAdded(domainEvent); 19 } 20 21 public clearEvents(): void { 22 this._domainEvents.splice(0, this._domainEvents.length); 23 } 24 25 private logDomainEventAdded(domainEvent: IDomainEvent): void { 26 const thisClass = Reflect.getPrototypeOf(this); 27 const domainEventClass = Reflect.getPrototypeOf(domainEvent); 28 console.info( 29 `[Domain Event Created]:`, 30 thisClass?.constructor.name, 31 '==>', 32 domainEventClass?.constructor.name, 33 ); 34 } 35}