factuges_2025/packages/rdx-ddd-domain/src/aggregate-root.ts
2025-04-27 22:47:47 +02:00

40 lines
1.1 KiB
TypeScript

import { logger } from "@rdx/logger";
import { DomainEntity } from "./domain-entity";
import { IDomainEvent } from "./events";
export abstract class AggregateRoot<T extends object> extends DomainEntity<T> {
private _domainEvents: IDomainEvent[] = [];
private logDomainEventAdded(event: IDomainEvent): void {
const thisClass = Reflect.getPrototypeOf(this);
const domainEventClass = Reflect.getPrototypeOf(event);
logger.info(
`[Domain Event Created]: ${thisClass?.constructor.name} ==> ${domainEventClass?.constructor.name}`
);
}
/**
* 🔹 Agregar un evento de dominio al agregado
*/
protected addDomainEvent(event: IDomainEvent): void {
this._domainEvents.push(event);
// Log the domain event
this.logDomainEventAdded(event);
}
/**
* 🔹 Obtener los eventos de dominio pendientes
*/
get domainEvents(): IDomainEvent[] {
return this._domainEvents;
}
/**
* 🔹 Limpiar la lista de eventos después de procesarlos
*/
public clearDomainEvents(): void {
this._domainEvents.splice(0, this._domainEvents.length);
}
}