@bitloops/bl-boilerplate-core
Version:
TypeScript boilerplate code for Bitloops Language generated projects
59 lines (58 loc) • 2.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AggregateRoot = void 0;
/**
* ISC License
* Copyright (c) 2019, [Khalil Stemmler](https://khalilstemmler.com)
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
const Entity_1 = require("./Entity");
class AggregateRoot extends Entity_1.Entity {
constructor() {
super(...arguments);
this._domainEvents = [];
}
get id() {
return this._id;
}
get aggregateVersion() {
return this._aggregateVersion;
}
set aggregateVersion(version) {
this._aggregateVersion = version;
}
get domainEvents() {
return this._domainEvents;
}
addDomainEventClass(domainEventClass) {
const domainEvent = new domainEventClass(this);
this.addDomainEvent(domainEvent);
}
addDomainEvent(domainEvent) {
// Add the domain event to this aggregate's list of domain events
this._domainEvents.push(domainEvent);
// Log the domain event
this.logDomainEventAdded(domainEvent);
}
clearEvents() {
this._domainEvents.splice(0, this._domainEvents.length);
}
logDomainEventAdded(domainEvent) {
var _a, _b;
const thisClass = Reflect.getPrototypeOf(this);
const domainEventClass = Reflect.getPrototypeOf(domainEvent);
console.info(`[Domain Event Created]:`, (_a = thisClass === null || thisClass === void 0 ? void 0 : thisClass.constructor) === null || _a === void 0 ? void 0 : _a.name, '==>', (_b = domainEventClass === null || domainEventClass === void 0 ? void 0 : domainEventClass.constructor) === null || _b === void 0 ? void 0 : _b.name);
}
}
exports.AggregateRoot = AggregateRoot;