import { v4 as uuidv4 } from 'uuid';

/**
 * 领域事件基类
 */
export abstract class DomainEvent {
  readonly eventId: string;
  readonly occurredAt: Date;
  abstract readonly eventType: string;

  constructor() {
    this.eventId = uuidv4();
    this.occurredAt = new Date();
  }

  abstract toPayload(): Record<string, unknown>;
}
