@webiny/api-page-builder-so-ddb
Version:
The DynamoDB storage operations Webiny Page Builder API.
62 lines (60 loc) • 1.81 kB
JavaScript
;
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