@dugongjs/core
Version:
32 lines (31 loc) • 1.39 kB
JavaScript
import { instanceToPlain, plainToInstance } from "class-transformer";
import equal from "fast-deep-equal";
class AggregateSnapshotTransformer {
takeSnapshot(origin, aggregateType, aggregate, tenantId) {
const aggregateSnapshot = instanceToPlain(aggregate);
return {
origin: origin,
aggregateType: aggregateType,
aggregateId: aggregate.getId(),
tenantId: tenantId,
domainEventSequenceNumber: aggregate.getCurrentDomainEventSequenceNumber(),
snapshotData: aggregateSnapshot
};
}
restoreFromSnapshot(aggregateClass, snapshot) {
const { aggregateId, domainEventSequenceNumber, snapshotData } = snapshot;
const aggregate = plainToInstance(aggregateClass, snapshotData);
if (!aggregate.getId()) {
aggregate.setId(aggregateId);
}
aggregate.setCurrentDomainEventSequenceNumber(domainEventSequenceNumber);
return aggregate;
}
canBeRestoredFromSnapshot(aggregateClass, aggregate) {
const snapshot = JSON.parse(JSON.stringify(instanceToPlain(aggregate)));
const restored = plainToInstance(aggregateClass, snapshot);
const isEqual = equal(aggregate, restored);
return { snapshot, restored, isEqual };
}
}
export const aggregateSnapshotTransformer = new AggregateSnapshotTransformer();