This repository has been archived on 2026-01-22. You can view files and clone it, but cannot push or open issues or pull requests.
factuges_2025/packages/rdx-ddd-domain/src/aggregate-root.ts

40 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-04-27 20:47:47 +00:00
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);
}
}