import { v4 as uuidv4 } from 'uuid'; export abstract class DomainEvent { readonly eventId: string; readonly eventType: string; readonly aggregateId: string; readonly aggregateType: string; readonly occurredAt: Date; readonly version: number; constructor(params: { aggregateId: string; aggregateType: string; version?: number; }) { this.eventId = uuidv4(); this.eventType = this.constructor.name; this.aggregateId = params.aggregateId; this.aggregateType = params.aggregateType; this.occurredAt = new Date(); this.version = params.version ?? 1; } abstract getPayload(): unknown; }