/** * Base Domain Event * * Abstract base class for all domain events. */ import { v4 as uuidv4 } from 'uuid'; export abstract class DomainEvent { public readonly eventId: string; public readonly occurredAt: Date; constructor() { this.eventId = uuidv4(); this.occurredAt = new Date(); } abstract get eventType(): string; abstract get aggregateId(): string; abstract get aggregateType(): string; abstract get payload(): Record; }