UNPKG

@dugongjs/core

Version:

32 lines (31 loc) 1.39 kB
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();