UNPKG

@webiny/api-page-builder-so-ddb

Version:

The DynamoDB storage operations Webiny Page Builder API.

62 lines (60 loc) 1.81 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.PageTemplateDataLoader = void 0; var _dataloader = _interopRequireDefault(require("dataloader")); var _dbDynamodb = require("@webiny/db-dynamodb"); var _keys = require("./keys"); class PageTemplateDataLoader { _getDataLoader = undefined; constructor(params) { this.entity = params.entity; } async getOne(item) { return await this.getDataLoader().load(item); } async getAll(items) { return await this.getDataLoader().loadMany(items); } clear() { this.getDataLoader().clearAll(); } getDataLoader() { if (!this._getDataLoader) { const cacheKeyFn = key => { return `T#${key.tenant}#L#${key.locale}#${key.id}`; }; this._getDataLoader = new _dataloader.default(async items => { const batched = items.map(item => { return this.entity.getBatch({ PK: (0, _keys.createPrimaryPK)(item), SK: "A" }); }); const records = await (0, _dbDynamodb.batchReadAll)({ table: this.entity.table, items: batched }); const results = records.reduce((collection, result) => { if (!result) { return collection; } const key = cacheKeyFn(result.data); collection[key] = result.data; return collection; }, {}); return items.map(item => { const key = cacheKeyFn(item); return results[key] || null; }); }, { cacheKeyFn }); } return this._getDataLoader; } } exports.PageTemplateDataLoader = PageTemplateDataLoader; //# sourceMappingURL=dataLoader.js.map