UNPKG

@webda/core

Version:

Expose API with Lambda

80 lines 2.15 kB
import MapperService, { MapperParameters } from "./mapper.js"; export class AggregatorParameters extends MapperParameters { constructor(params) { super(params); this.key ?? (this.key = "index"); } } /** * Service that aggregate several CoreModel into one * * Similar to a Mapper except that the target is constant * * @WebdaModda Aggregator */ export default class AggregatorService extends MapperService { /** * Create index if not existing * * @inheritdoc */ async init() { await this.createAggregate(); return this; } /** * @override */ loadParameters(params) { return new AggregatorParameters(params); } /** * Make sure the aggregate document exist */ async createAggregate() { if (!(await this.targetStore.exists(this.parameters.key))) { await this.targetStore.save({ uuid: this.parameters.key }); } } /** * Create an aggregation * * @param object * @param updates * @returns */ async handleMap(object, updates) { let mapUpdates = {}; if (typeof updates === "object") { let toUpdate = false; for (let i in updates) { if (this.parameters.fields.indexOf(i) >= 0) { toUpdate = true; } } if (!toUpdate) { return; } } else if (updates === "deleted") { await this.targetStore.removeAttribute(this.parameters.key, object.getUuid()); return; } else if (updates === "created") { updates = object; } // Create mapper let mapper = {}; this.parameters.fields.forEach(id => { mapper[id] = updates[id]; }); mapUpdates[object.getUuid()] = mapper; mapUpdates._lastUpdate = new Date(); // @ts-ignore await this.targetStore._patch(mapUpdates, this.parameters.key); } } export { AggregatorService }; //# sourceMappingURL=aggregator.js.map