@webiny/api-headless-cms-ddb 0.0.0-unstable.496cf268ac → 0.0.0-unstable.606fc9c866
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/operations/entry/index.js +75 -25
- package/operations/entry/index.js.map +1 -1
- package/package.json +10 -10
package/index.js
CHANGED
|
@@ -37,6 +37,7 @@ Object.keys(_plugins3).forEach(function (key) {
|
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
39
|
var _ValueFilterPlugin = require("@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin");
|
|
40
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
40
41
|
const createStorageOperations = params => {
|
|
41
42
|
const {
|
|
42
43
|
attributes,
|
|
@@ -95,7 +96,7 @@ const createStorageOperations = params => {
|
|
|
95
96
|
return {
|
|
96
97
|
name: "dynamodb",
|
|
97
98
|
beforeInit: async context => {
|
|
98
|
-
const types = ["cms-model-field-to-graphql", _plugins3.CmsEntryFieldFilterPathPlugin.type, _plugins3.CmsFieldFilterValueTransformPlugin.type, _plugins3.CmsEntryFieldFilterPlugin.type, _plugins3.CmsEntryFieldSortingPlugin.type, _ValueFilterPlugin.ValueFilterPlugin.type];
|
|
99
|
+
const types = ["cms-model-field-to-graphql", _plugins3.CmsEntryFieldFilterPathPlugin.type, _plugins3.CmsFieldFilterValueTransformPlugin.type, _plugins3.CmsEntryFieldFilterPlugin.type, _plugins3.CmsEntryFieldSortingPlugin.type, _ValueFilterPlugin.ValueFilterPlugin.type, _apiHeadlessCms.StorageOperationsCmsModelPlugin.type];
|
|
99
100
|
/**
|
|
100
101
|
* Collect all required plugins from parent context.
|
|
101
102
|
*/
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createStorageOperations","params","attributes","table","documentClient","plugins","userPlugins","tableInstance","createTable","entities","settings","createSettingsEntity","entityName","ENTITIES","SETTINGS","system","createSystemEntity","SYSTEM","groups","createGroupEntity","GROUPS","models","createModelEntity","MODELS","entries","createEntryEntity","ENTRIES","PluginsContainer","dynamoDbValueFilters","dynamoDbPlugins","createFilterCreatePlugins","name","beforeInit","context","types","CmsEntryFieldFilterPathPlugin","type","CmsFieldFilterValueTransformPlugin","CmsEntryFieldFilterPlugin","CmsEntryFieldSortingPlugin","ValueFilterPlugin","mergeByType","register","getEntities","getTable","createSystemStorageOperations","entity","createSettingsStorageOperations","createGroupsStorageOperations","createModelsStorageOperations","createEntriesStorageOperations"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport dynamoDbPlugins from \"./dynamoDb\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createGroupEntity } from \"~/definitions/group\";\nimport { createModelEntity } from \"~/definitions/model\";\nimport { createEntryEntity } from \"~/definitions/entry\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createGroupsStorageOperations } from \"~/operations/group\";\nimport { createModelsStorageOperations } from \"~/operations/model\";\nimport { createEntriesStorageOperations } from \"./operations/entry\";\n\nimport { createFilterCreatePlugins } from \"~/operations/entry/filtering/plugins\";\nimport {\n CmsEntryFieldFilterPathPlugin,\n CmsEntryFieldFilterPlugin,\n CmsEntryFieldSortingPlugin,\n CmsFieldFilterValueTransformPlugin\n} from \"~/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\n\nexport * from \"./plugins\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const { attributes, table, documentClient, plugins: userPlugins } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n\n const entities = {\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n groups: createGroupEntity({\n entityName: ENTITIES.GROUPS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.GROUPS] : {}\n }),\n models: createModelEntity({\n entityName: ENTITIES.MODELS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.MODELS] : {}\n }),\n entries: createEntryEntity({\n entityName: ENTITIES.ENTRIES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.ENTRIES] : {}\n })\n };\n\n const plugins = new PluginsContainer([\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Field plugins for DynamoDB.\n */\n dynamoDbPlugins(),\n /**\n * Filter create plugins.\n */\n createFilterCreatePlugins(),\n /**\n * User defined custom plugins.\n */\n ...(userPlugins || [])\n ]);\n\n return {\n name: \"dynamodb\",\n beforeInit: async context => {\n const types: string[] = [\n \"cms-model-field-to-graphql\",\n CmsEntryFieldFilterPathPlugin.type,\n CmsFieldFilterValueTransformPlugin.type,\n CmsEntryFieldFilterPlugin.type,\n CmsEntryFieldSortingPlugin.type,\n ValueFilterPlugin.type\n ];\n /**\n * Collect all required plugins from parent context.\n */\n for (const type of types) {\n plugins.mergeByType(context.plugins, type);\n }\n /**\n * Pass the plugins to the parent context.\n */\n context.plugins.register([dynamoDbPlugins()]);\n },\n getEntities: () => entities,\n getTable: () => tableInstance,\n system: createSystemStorageOperations({\n entity: entities.system\n }),\n settings: createSettingsStorageOperations({\n entity: entities.settings\n }),\n groups: createGroupsStorageOperations({\n entity: entities.groups,\n plugins\n }),\n models: createModelsStorageOperations({\n entity: entities.models\n }),\n entries: createEntriesStorageOperations({\n entity: entities.entries,\n plugins\n })\n };\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;
|
|
1
|
+
{"version":3,"names":["createStorageOperations","params","attributes","table","documentClient","plugins","userPlugins","tableInstance","createTable","entities","settings","createSettingsEntity","entityName","ENTITIES","SETTINGS","system","createSystemEntity","SYSTEM","groups","createGroupEntity","GROUPS","models","createModelEntity","MODELS","entries","createEntryEntity","ENTRIES","PluginsContainer","dynamoDbValueFilters","dynamoDbPlugins","createFilterCreatePlugins","name","beforeInit","context","types","CmsEntryFieldFilterPathPlugin","type","CmsFieldFilterValueTransformPlugin","CmsEntryFieldFilterPlugin","CmsEntryFieldSortingPlugin","ValueFilterPlugin","StorageOperationsCmsModelPlugin","mergeByType","register","getEntities","getTable","createSystemStorageOperations","entity","createSettingsStorageOperations","createGroupsStorageOperations","createModelsStorageOperations","createEntriesStorageOperations"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport dynamoDbPlugins from \"./dynamoDb\";\nimport { ENTITIES, StorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createGroupEntity } from \"~/definitions/group\";\nimport { createModelEntity } from \"~/definitions/model\";\nimport { createEntryEntity } from \"~/definitions/entry\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createGroupsStorageOperations } from \"~/operations/group\";\nimport { createModelsStorageOperations } from \"~/operations/model\";\nimport { createEntriesStorageOperations } from \"./operations/entry\";\n\nimport { createFilterCreatePlugins } from \"~/operations/entry/filtering/plugins\";\nimport {\n CmsEntryFieldFilterPathPlugin,\n CmsEntryFieldFilterPlugin,\n CmsEntryFieldSortingPlugin,\n CmsFieldFilterValueTransformPlugin\n} from \"~/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { StorageOperationsCmsModelPlugin } from \"@webiny/api-headless-cms\";\n\nexport * from \"./plugins\";\n\nexport const createStorageOperations: StorageOperationsFactory = params => {\n const { attributes, table, documentClient, plugins: userPlugins } = params;\n\n const tableInstance = createTable({\n table,\n documentClient\n });\n\n const entities = {\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n groups: createGroupEntity({\n entityName: ENTITIES.GROUPS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.GROUPS] : {}\n }),\n models: createModelEntity({\n entityName: ENTITIES.MODELS,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.MODELS] : {}\n }),\n entries: createEntryEntity({\n entityName: ENTITIES.ENTRIES,\n table: tableInstance,\n attributes: attributes ? attributes[ENTITIES.ENTRIES] : {}\n })\n };\n\n const plugins = new PluginsContainer([\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Field plugins for DynamoDB.\n */\n dynamoDbPlugins(),\n /**\n * Filter create plugins.\n */\n createFilterCreatePlugins(),\n /**\n * User defined custom plugins.\n */\n ...(userPlugins || [])\n ]);\n\n return {\n name: \"dynamodb\",\n beforeInit: async context => {\n const types: string[] = [\n \"cms-model-field-to-graphql\",\n CmsEntryFieldFilterPathPlugin.type,\n CmsFieldFilterValueTransformPlugin.type,\n CmsEntryFieldFilterPlugin.type,\n CmsEntryFieldSortingPlugin.type,\n ValueFilterPlugin.type,\n StorageOperationsCmsModelPlugin.type\n ];\n /**\n * Collect all required plugins from parent context.\n */\n for (const type of types) {\n plugins.mergeByType(context.plugins, type);\n }\n /**\n * Pass the plugins to the parent context.\n */\n context.plugins.register([dynamoDbPlugins()]);\n },\n getEntities: () => entities,\n getTable: () => tableInstance,\n system: createSystemStorageOperations({\n entity: entities.system\n }),\n settings: createSettingsStorageOperations({\n entity: entities.settings\n }),\n groups: createGroupsStorageOperations({\n entity: entities.groups,\n plugins\n }),\n models: createModelsStorageOperations({\n entity: entities.models\n }),\n entries: createEntriesStorageOperations({\n entity: entities.entries,\n plugins\n })\n };\n};\n"],"mappings":"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"}
|
|
@@ -53,11 +53,24 @@ const convertFromStorageEntry = params => {
|
|
|
53
53
|
values
|
|
54
54
|
});
|
|
55
55
|
};
|
|
56
|
+
const MAX_LIST_LIMIT = 10000;
|
|
56
57
|
const createEntriesStorageOperations = params => {
|
|
57
58
|
const {
|
|
58
59
|
entity,
|
|
59
60
|
plugins
|
|
60
61
|
} = params;
|
|
62
|
+
let storageOperationsCmsModelPlugin;
|
|
63
|
+
const getStorageOperationsCmsModelPlugin = () => {
|
|
64
|
+
if (storageOperationsCmsModelPlugin) {
|
|
65
|
+
return storageOperationsCmsModelPlugin;
|
|
66
|
+
}
|
|
67
|
+
storageOperationsCmsModelPlugin = plugins.oneByType(_apiHeadlessCms.StorageOperationsCmsModelPlugin.type);
|
|
68
|
+
return storageOperationsCmsModelPlugin;
|
|
69
|
+
};
|
|
70
|
+
const getStorageOperationsModel = model => {
|
|
71
|
+
const plugin = getStorageOperationsCmsModelPlugin();
|
|
72
|
+
return plugin.getModel(model);
|
|
73
|
+
};
|
|
61
74
|
const dataLoaders = new _dataLoaders.DataLoadersHandler({
|
|
62
75
|
entity
|
|
63
76
|
});
|
|
@@ -82,11 +95,12 @@ const createEntriesStorageOperations = params => {
|
|
|
82
95
|
});
|
|
83
96
|
};
|
|
84
97
|
};
|
|
85
|
-
const create = async (
|
|
98
|
+
const create = async (initialModel, params) => {
|
|
86
99
|
const {
|
|
87
100
|
entry,
|
|
88
101
|
storageEntry: initialStorageEntry
|
|
89
102
|
} = params;
|
|
103
|
+
const model = getStorageOperationsModel(initialModel);
|
|
90
104
|
const partitionKey = (0, _keys.createPartitionKey)({
|
|
91
105
|
id: entry.id,
|
|
92
106
|
locale: model.locale,
|
|
@@ -101,7 +115,7 @@ const createEntriesStorageOperations = params => {
|
|
|
101
115
|
/**
|
|
102
116
|
* We need to:
|
|
103
117
|
* - create new main entry item
|
|
104
|
-
* - create new or update latest entry item
|
|
118
|
+
* - create new or update the latest entry item
|
|
105
119
|
*/
|
|
106
120
|
const items = [entity.putBatch((0, _objectSpread2.default)((0, _objectSpread2.default)({}, storageEntry), {}, {
|
|
107
121
|
locked,
|
|
@@ -148,11 +162,12 @@ const createEntriesStorageOperations = params => {
|
|
|
148
162
|
}
|
|
149
163
|
return initialStorageEntry;
|
|
150
164
|
};
|
|
151
|
-
const createRevisionFrom = async (
|
|
165
|
+
const createRevisionFrom = async (initialModel, params) => {
|
|
152
166
|
const {
|
|
153
167
|
entry,
|
|
154
168
|
storageEntry: initialStorageEntry
|
|
155
169
|
} = params;
|
|
170
|
+
const model = getStorageOperationsModel(initialModel);
|
|
156
171
|
const partitionKey = (0, _keys.createPartitionKey)({
|
|
157
172
|
id: entry.id,
|
|
158
173
|
locale: model.locale,
|
|
@@ -200,11 +215,12 @@ const createEntriesStorageOperations = params => {
|
|
|
200
215
|
*/
|
|
201
216
|
return initialStorageEntry;
|
|
202
217
|
};
|
|
203
|
-
const update = async (
|
|
218
|
+
const update = async (initialModel, params) => {
|
|
204
219
|
const {
|
|
205
220
|
entry,
|
|
206
221
|
storageEntry: initialStorageEntry
|
|
207
222
|
} = params;
|
|
223
|
+
const model = getStorageOperationsModel(initialModel);
|
|
208
224
|
const partitionKey = (0, _keys.createPartitionKey)({
|
|
209
225
|
id: entry.id,
|
|
210
226
|
locale: model.locale,
|
|
@@ -242,7 +258,7 @@ const createEntriesStorageOperations = params => {
|
|
|
242
258
|
}
|
|
243
259
|
|
|
244
260
|
/**
|
|
245
|
-
* We need the latest entry to update it as well if
|
|
261
|
+
* We need the latest entry to update it as well if necessary.
|
|
246
262
|
*/
|
|
247
263
|
const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);
|
|
248
264
|
if (latestStorageEntry && latestStorageEntry.id === entry.id) {
|
|
@@ -272,10 +288,11 @@ const createEntriesStorageOperations = params => {
|
|
|
272
288
|
});
|
|
273
289
|
}
|
|
274
290
|
};
|
|
275
|
-
const deleteEntry = async (
|
|
291
|
+
const deleteEntry = async (initialModel, params) => {
|
|
276
292
|
const {
|
|
277
293
|
entry
|
|
278
294
|
} = params;
|
|
295
|
+
const model = getStorageOperationsModel(initialModel);
|
|
279
296
|
const queryAllParams = {
|
|
280
297
|
entity,
|
|
281
298
|
partitionKey: (0, _keys.createPartitionKey)({
|
|
@@ -318,12 +335,13 @@ const createEntriesStorageOperations = params => {
|
|
|
318
335
|
});
|
|
319
336
|
}
|
|
320
337
|
};
|
|
321
|
-
const deleteRevision = async (
|
|
338
|
+
const deleteRevision = async (initialModel, params) => {
|
|
322
339
|
const {
|
|
323
340
|
entry,
|
|
324
341
|
latestEntry,
|
|
325
342
|
latestStorageEntry: initialLatestStorageEntry
|
|
326
343
|
} = params;
|
|
344
|
+
const model = getStorageOperationsModel(initialModel);
|
|
327
345
|
const partitionKey = (0, _keys.createPartitionKey)({
|
|
328
346
|
id: entry.id,
|
|
329
347
|
locale: model.locale,
|
|
@@ -373,7 +391,8 @@ const createEntriesStorageOperations = params => {
|
|
|
373
391
|
});
|
|
374
392
|
}
|
|
375
393
|
};
|
|
376
|
-
const getLatestRevisionByEntryId = async (
|
|
394
|
+
const getLatestRevisionByEntryId = async (initialModel, params) => {
|
|
395
|
+
const model = getStorageOperationsModel(initialModel);
|
|
377
396
|
const items = await dataLoaders.getLatestRevisionByEntryId({
|
|
378
397
|
model,
|
|
379
398
|
ids: [params.id]
|
|
@@ -387,7 +406,8 @@ const createEntriesStorageOperations = params => {
|
|
|
387
406
|
model
|
|
388
407
|
});
|
|
389
408
|
};
|
|
390
|
-
const getPublishedRevisionByEntryId = async (
|
|
409
|
+
const getPublishedRevisionByEntryId = async (initialModel, params) => {
|
|
410
|
+
const model = getStorageOperationsModel(initialModel);
|
|
391
411
|
const items = await dataLoaders.getPublishedRevisionByEntryId({
|
|
392
412
|
model,
|
|
393
413
|
ids: [params.id]
|
|
@@ -401,7 +421,8 @@ const createEntriesStorageOperations = params => {
|
|
|
401
421
|
model
|
|
402
422
|
});
|
|
403
423
|
};
|
|
404
|
-
const getRevisionById = async (
|
|
424
|
+
const getRevisionById = async (initialModel, params) => {
|
|
425
|
+
const model = getStorageOperationsModel(initialModel);
|
|
405
426
|
const items = await dataLoaders.getRevisionById({
|
|
406
427
|
model,
|
|
407
428
|
ids: [params.id]
|
|
@@ -415,7 +436,8 @@ const createEntriesStorageOperations = params => {
|
|
|
415
436
|
model
|
|
416
437
|
});
|
|
417
438
|
};
|
|
418
|
-
const getRevisions = async (
|
|
439
|
+
const getRevisions = async (initialModel, params) => {
|
|
440
|
+
const model = getStorageOperationsModel(initialModel);
|
|
419
441
|
const items = await dataLoaders.getAllEntryRevisions({
|
|
420
442
|
model,
|
|
421
443
|
ids: [params.id]
|
|
@@ -427,7 +449,8 @@ const createEntriesStorageOperations = params => {
|
|
|
427
449
|
});
|
|
428
450
|
});
|
|
429
451
|
};
|
|
430
|
-
const getByIds = async (
|
|
452
|
+
const getByIds = async (initialModel, params) => {
|
|
453
|
+
const model = getStorageOperationsModel(initialModel);
|
|
431
454
|
const items = await dataLoaders.getRevisionById({
|
|
432
455
|
model,
|
|
433
456
|
ids: params.ids
|
|
@@ -439,7 +462,8 @@ const createEntriesStorageOperations = params => {
|
|
|
439
462
|
});
|
|
440
463
|
});
|
|
441
464
|
};
|
|
442
|
-
const getLatestByIds = async (
|
|
465
|
+
const getLatestByIds = async (initialModel, params) => {
|
|
466
|
+
const model = getStorageOperationsModel(initialModel);
|
|
443
467
|
const items = await dataLoaders.getLatestRevisionByEntryId({
|
|
444
468
|
model,
|
|
445
469
|
ids: params.ids
|
|
@@ -451,7 +475,8 @@ const createEntriesStorageOperations = params => {
|
|
|
451
475
|
});
|
|
452
476
|
});
|
|
453
477
|
};
|
|
454
|
-
const getPublishedByIds = async (
|
|
478
|
+
const getPublishedByIds = async (initialModel, params) => {
|
|
479
|
+
const model = getStorageOperationsModel(initialModel);
|
|
455
480
|
const items = await dataLoaders.getPublishedRevisionByEntryId({
|
|
456
481
|
model,
|
|
457
482
|
ids: params.ids
|
|
@@ -463,7 +488,8 @@ const createEntriesStorageOperations = params => {
|
|
|
463
488
|
});
|
|
464
489
|
});
|
|
465
490
|
};
|
|
466
|
-
const getPreviousRevision = async (
|
|
491
|
+
const getPreviousRevision = async (initialModel, params) => {
|
|
492
|
+
const model = getStorageOperationsModel(initialModel);
|
|
467
493
|
const {
|
|
468
494
|
entryId,
|
|
469
495
|
version
|
|
@@ -509,7 +535,8 @@ const createEntriesStorageOperations = params => {
|
|
|
509
535
|
}));
|
|
510
536
|
}
|
|
511
537
|
};
|
|
512
|
-
const list = async (
|
|
538
|
+
const list = async (initialModel, params) => {
|
|
539
|
+
const model = getStorageOperationsModel(initialModel);
|
|
513
540
|
const {
|
|
514
541
|
limit: initialLimit = 10,
|
|
515
542
|
where: initialWhere,
|
|
@@ -518,7 +545,7 @@ const createEntriesStorageOperations = params => {
|
|
|
518
545
|
fields,
|
|
519
546
|
search
|
|
520
547
|
} = params;
|
|
521
|
-
const limit = initialLimit <= 0 || initialLimit >=
|
|
548
|
+
const limit = initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;
|
|
522
549
|
const type = initialWhere.published ? "P" : "L";
|
|
523
550
|
const queryAllParams = {
|
|
524
551
|
entity,
|
|
@@ -616,7 +643,8 @@ const createEntriesStorageOperations = params => {
|
|
|
616
643
|
items: (0, _cleanup.cleanupItems)(entity, slicedItems)
|
|
617
644
|
};
|
|
618
645
|
};
|
|
619
|
-
const get = async (
|
|
646
|
+
const get = async (initialModel, params) => {
|
|
647
|
+
const model = getStorageOperationsModel(initialModel);
|
|
620
648
|
const {
|
|
621
649
|
items
|
|
622
650
|
} = await list(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
|
|
@@ -624,11 +652,12 @@ const createEntriesStorageOperations = params => {
|
|
|
624
652
|
}));
|
|
625
653
|
return items.shift() || null;
|
|
626
654
|
};
|
|
627
|
-
const publish = async (
|
|
655
|
+
const publish = async (initialModel, params) => {
|
|
628
656
|
const {
|
|
629
657
|
entry,
|
|
630
658
|
storageEntry: initialStorageEntry
|
|
631
659
|
} = params;
|
|
660
|
+
const model = getStorageOperationsModel(initialModel);
|
|
632
661
|
const partitionKey = (0, _keys.createPartitionKey)({
|
|
633
662
|
id: entry.id,
|
|
634
663
|
locale: model.locale,
|
|
@@ -636,7 +665,7 @@ const createEntriesStorageOperations = params => {
|
|
|
636
665
|
});
|
|
637
666
|
|
|
638
667
|
/**
|
|
639
|
-
* We need the latest and published entries to see if something needs to be updated
|
|
668
|
+
* We need the latest and published entries to see if something needs to be updated alongside the publishing one.
|
|
640
669
|
*/
|
|
641
670
|
const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);
|
|
642
671
|
const initialPublishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);
|
|
@@ -648,7 +677,7 @@ const createEntriesStorageOperations = params => {
|
|
|
648
677
|
* We need to update:
|
|
649
678
|
* - current entry revision sort key
|
|
650
679
|
* - published sort key
|
|
651
|
-
* - latest sort key - if entry updated is actually latest
|
|
680
|
+
* - the latest sort key - if entry updated is actually latest
|
|
652
681
|
* - previous published entry to unpublished status - if any previously published entry
|
|
653
682
|
*/
|
|
654
683
|
const items = [entity.putBatch((0, _objectSpread2.default)((0, _objectSpread2.default)({}, storageEntry), {}, {
|
|
@@ -704,11 +733,12 @@ const createEntriesStorageOperations = params => {
|
|
|
704
733
|
});
|
|
705
734
|
}
|
|
706
735
|
};
|
|
707
|
-
const unpublish = async (
|
|
736
|
+
const unpublish = async (initialModel, params) => {
|
|
708
737
|
const {
|
|
709
738
|
entry,
|
|
710
739
|
storageEntry: initialStorageEntry
|
|
711
740
|
} = params;
|
|
741
|
+
const model = getStorageOperationsModel(initialModel);
|
|
712
742
|
const partitionKey = (0, _keys.createPartitionKey)({
|
|
713
743
|
id: entry.id,
|
|
714
744
|
locale: model.locale,
|
|
@@ -722,7 +752,7 @@ const createEntriesStorageOperations = params => {
|
|
|
722
752
|
* We need to:
|
|
723
753
|
* - delete currently published entry
|
|
724
754
|
* - update current entry revision with new data
|
|
725
|
-
* - update latest entry status - if entry being unpublished is latest
|
|
755
|
+
* - update the latest entry status - if entry being unpublished is latest
|
|
726
756
|
*/
|
|
727
757
|
const items = [entity.deleteBatch({
|
|
728
758
|
PK: partitionKey,
|
|
@@ -736,7 +766,7 @@ const createEntriesStorageOperations = params => {
|
|
|
736
766
|
}))];
|
|
737
767
|
|
|
738
768
|
/**
|
|
739
|
-
* We need the latest entry to see if something needs to be updated
|
|
769
|
+
* We need the latest entry to see if something needs to be updated alongside the unpublishing one.
|
|
740
770
|
*/
|
|
741
771
|
const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);
|
|
742
772
|
if (latestStorageEntry && entry.id === latestStorageEntry.id) {
|
|
@@ -764,6 +794,25 @@ const createEntriesStorageOperations = params => {
|
|
|
764
794
|
});
|
|
765
795
|
}
|
|
766
796
|
};
|
|
797
|
+
const getUniqueFieldValues = async (model, params) => {
|
|
798
|
+
const {
|
|
799
|
+
where,
|
|
800
|
+
fieldId
|
|
801
|
+
} = params;
|
|
802
|
+
const field = model.fields.find(f => f.fieldId === fieldId);
|
|
803
|
+
if (!field) {
|
|
804
|
+
throw new _error.default(`Could not find field with given "fieldId" value.`, "FIELD_NOT_FOUND", {
|
|
805
|
+
fieldId
|
|
806
|
+
});
|
|
807
|
+
}
|
|
808
|
+
const {
|
|
809
|
+
items
|
|
810
|
+
} = await list(model, {
|
|
811
|
+
where,
|
|
812
|
+
limit: MAX_LIST_LIMIT
|
|
813
|
+
});
|
|
814
|
+
return Array.from(new Set(items.map(item => item.values[field.fieldId])));
|
|
815
|
+
};
|
|
767
816
|
return {
|
|
768
817
|
create,
|
|
769
818
|
createRevisionFrom,
|
|
@@ -781,7 +830,8 @@ const createEntriesStorageOperations = params => {
|
|
|
781
830
|
getRevisions,
|
|
782
831
|
publish,
|
|
783
832
|
list,
|
|
784
|
-
unpublish
|
|
833
|
+
unpublish,
|
|
834
|
+
getUniqueFieldValues
|
|
785
835
|
};
|
|
786
836
|
};
|
|
787
837
|
exports.createEntriesStorageOperations = createEntriesStorageOperations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createType","createLatestType","createPublishedType","convertToStorageEntry","params","model","storageEntry","values","convertValueKeyToStorage","fields","convertFromStorageEntry","convertValueKeyFromStorage","createEntriesStorageOperations","entity","plugins","dataLoaders","DataLoadersHandler","storageTransformPlugins","byType","StorageTransformPlugin","type","reduce","collection","plugin","fieldType","createStorageTransformCallable","field","value","fromStorage","getStoragePlugin","create","entry","initialStorageEntry","partitionKey","createPartitionKey","id","locale","tenant","isPublished","status","locked","items","putBatch","PK","SK","createRevisionSortKey","TYPE","GSI1_PK","createGSIPartitionKey","GSI1_SK","createGSISortKey","createLatestSortKey","push","createPublishedSortKey","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","createRevisionFrom","update","latestStorageEntry","getLatestRevisionByEntryId","deleteEntry","queryAllParams","options","gte","records","queryAll","map","item","deleteBatch","deleteRevision","latestEntry","initialLatestStorageEntry","publishedStorageEntry","getPublishedRevisionByEntryId","ids","shift","getRevisionById","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","entryId","version","queryParams","lt","zeroPad","filters","attr","eq","reverse","result","queryOne","cleanupItem","list","limit","initialLimit","where","initialWhere","after","sort","sortBy","search","published","index","storageEntries","length","hasMoreItems","totalCount","cursor","modelFields","createFields","Promise","all","fieldId","filteredItems","filter","fullTextSearch","term","sortedItems","start","parseInt","decodeCursor","end","undefined","slicedItems","slice","encodeCursor","cleanupItems","get","publish","initialPublishedStorageEntry","CONTENT_ENTRY_STATUS","UNPUBLISHED","unpublish","delete"],"sources":["index.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperations,\n CmsEntryStorageOperationsCreateParams,\n CmsEntryStorageOperationsCreateRevisionFromParams,\n CmsEntryStorageOperationsDeleteParams,\n CmsEntryStorageOperationsDeleteRevisionParams,\n CmsEntryStorageOperationsGetByIdsParams,\n CmsEntryStorageOperationsGetLatestByIdsParams,\n CmsEntryStorageOperationsGetLatestRevisionParams,\n CmsEntryStorageOperationsGetParams,\n CmsEntryStorageOperationsGetPreviousRevisionParams,\n CmsEntryStorageOperationsGetPublishedByIdsParams,\n CmsEntryStorageOperationsGetRevisionParams,\n CmsEntryStorageOperationsGetRevisionsParams,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsPublishParams,\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryStorageOperationsUpdateParams,\n StorageOperationsCmsModel,\n CONTENT_ENTRY_STATUS,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport {\n createGSIPartitionKey,\n createGSISortKey,\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport {\n queryAll,\n QueryAllParams,\n queryOne,\n QueryOneParams\n} from \"@webiny/db-dynamodb/utils/query\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils/cursor\";\nimport { zeroPad } from \"@webiny/utils/zeroPad\";\nimport { StorageTransformPlugin } from \"@webiny/api-headless-cms\";\nimport { FilterItemFromStorage } from \"./filtering/types\";\nimport { createFields } from \"~/operations/entry/filtering/createFields\";\nimport { filter, sort } from \"~/operations/entry/filtering\";\n\nconst createType = (): string => {\n return \"cms.entry\";\n};\nconst createLatestType = (): string => {\n return `${createType()}.l`;\n};\nconst createPublishedType = (): string => {\n return `${createType()}.p`;\n};\n\ninterface ConvertStorageEntryParams {\n storageEntry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\nconst convertToStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyToStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nconst convertFromStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyFromStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, plugins } = params;\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const storageTransformPlugins = plugins\n .byType<StorageTransformPlugin>(StorageTransformPlugin.type)\n .reduce((collection, plugin) => {\n collection[plugin.fieldType] = plugin;\n return collection;\n }, {} as Record<string, StorageTransformPlugin>);\n\n const createStorageTransformCallable = (\n model: StorageOperationsCmsModel\n ): FilterItemFromStorage => {\n return (field, value) => {\n const plugin: StorageTransformPlugin = storageTransformPlugins[field.type];\n if (!plugin) {\n return value;\n }\n return plugin.fromStorage({\n model,\n field,\n value,\n getStoragePlugin(fieldType: string): StorageTransformPlugin {\n return storageTransformPlugins[fieldType] || storageTransformPlugins[\"*\"];\n },\n plugins\n });\n };\n };\n\n const create = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateParams\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const isPublished = entry.status === \"published\";\n\n const locked = isPublished ? true : entry.locked;\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to:\n * - create new main entry item\n * - create new or update latest entry item\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n\n /**\n * We need to create published entry if\n */\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert data into the DynamoDB.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n return initialStorageEntry;\n };\n\n const createRevisionFrom = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n /**\n * We need to:\n * - create the main entry item\n * - update the last entry item to a current one\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create revision from given entry.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return initialStorageEntry;\n };\n\n const update = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsUpdateParams\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const isPublished = entry.status === \"published\";\n const locked = isPublished ? true : entry.locked;\n\n const items = [];\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to:\n * - update the current entry\n * - update the latest entry if the current entry is the latest one\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n }\n\n /**\n * We need the latest entry to update it as well if neccessary.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry\n }\n );\n }\n };\n\n const deleteEntry = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteParams\n ) => {\n const { entry } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n options: {\n gte: \" \"\n }\n };\n\n let records = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load all records.\",\n ex.code || \"LOAD_ALL_RECORDS_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n const items = records.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the entry.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n entry\n }\n );\n }\n };\n\n const deleteRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entry, latestEntry, latestStorageEntry: initialLatestStorageEntry } = params;\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createRevisionSortKey(entry)\n })\n ];\n\n const publishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n /**\n * If revision we are deleting is the published one as well, we need to delete those records as well.\n */\n if (publishedStorageEntry && entry.id === publishedStorageEntry.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n if (initialLatestStorageEntry) {\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, {\n error: ex,\n entry,\n latestEntry\n });\n }\n };\n\n const getLatestRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n const getPublishedRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisionById = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const items = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisions = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n const items = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetByIdsParams\n ) => {\n const items = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getLatestByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPublishedByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPreviousRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPreviousRevisionParams\n ) => {\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant: model.tenant,\n locale: model.locale,\n id: entryId\n }),\n options: {\n lt: `REV#${zeroPad(version)}`,\n /**\n * We need to have extra checks because DynamoDB will return published or latest record if there is no REV# record.\n */\n filters: [\n {\n attr: \"TYPE\",\n eq: createType()\n },\n {\n attr: \"version\",\n lt: version\n }\n ],\n reverse: true\n }\n };\n\n try {\n const result = await queryOne<CmsEntry>(queryParams);\n\n const storageEntry = cleanupItem(entity, result);\n if (!storageEntry) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry,\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get previous version of given entry.\",\n ex.code || \"GET_PREVIOUS_VERSION_ERROR\",\n {\n ...params,\n error: ex,\n partitionKey: queryParams.partitionKey,\n options: queryParams.options,\n model\n }\n );\n }\n };\n\n const list = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsListParams\n ) => {\n const {\n limit: initialLimit = 10,\n where: initialWhere,\n after,\n sort: sortBy,\n fields,\n search\n } = params;\n const limit = initialLimit <= 0 || initialLimit >= 10000 ? 10000 : initialLimit;\n\n const type = initialWhere.published ? \"P\" : \"L\";\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createGSIPartitionKey(model, type),\n options: {\n index: \"GSI1\",\n gte: \" \"\n }\n };\n let storageEntries: CmsStorageEntry[] = [];\n try {\n storageEntries = await queryAll<CmsStorageEntry>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(ex.message, \"QUERY_ENTRIES_ERROR\", {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n });\n }\n if (storageEntries.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n const where: Partial<CmsEntryListWhere> = {\n ...initialWhere\n };\n delete where[\"published\"];\n delete where[\"latest\"];\n /**\n * We need an object containing field, transformers and paths.\n * Just build it here and pass on into other methods that require it to avoid mapping multiple times.\n */\n const modelFields = createFields({\n plugins,\n fields: model.fields\n });\n\n const fromStorage = createStorageTransformCallable(model);\n /**\n * Let's transform records from storage ones to regular ones, so we do not need to do it later.\n *\n * This is always being done, but at least its in parallel.\n */\n const records = await Promise.all(\n storageEntries.map(async storageEntry => {\n const entry = convertFromStorageEntry({\n storageEntry,\n model\n });\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(\n field,\n entry.values[field.fieldId]\n );\n }\n\n return entry as CmsEntry;\n })\n );\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredItems = filter({\n items: records,\n where,\n plugins,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: fields || []\n }\n });\n\n const totalCount = filteredItems.length;\n\n /**\n * Sorting is also done via the code.\n * It takes the sort input and sorts by it via the lodash sortBy method.\n */\n const sortedItems = sort({\n model,\n plugins,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const end = limit > totalCount + start + limit ? undefined : start + limit;\n const slicedItems = sortedItems.slice(start, end);\n /**\n * Although we do not need a cursor here, we will use it as such to keep it standardized.\n * Number is simply encoded.\n */\n const cursor = totalCount > start + limit ? encodeCursor(`${start + limit}`) : null;\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: cleanupItems(entity, slicedItems)\n };\n };\n\n const get = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetParams\n ) => {\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsPublishParams\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n /**\n * We need the latest and published entries to see if something needs to be updated along side the publishing one.\n */\n const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n const initialPublishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to update:\n * - current entry revision sort key\n * - published sort key\n * - latest sort key - if entry updated is actually latest\n * - previous published entry to unpublished status - if any previously published entry\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n if (initialLatestStorageEntry && entry.id === initialLatestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n if (initialPublishedStorageEntry && initialPublishedStorageEntry.id !== entry.id) {\n const publishedStorageEntry = convertToStorageEntry({\n storageEntry: initialPublishedStorageEntry,\n model\n });\n items.push(\n entity.putBatch({\n ...publishedStorageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(publishedStorageEntry),\n TYPE: createType(),\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(publishedStorageEntry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the publishing batch.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n entry,\n latestStorageEntry: initialLatestStorageEntry,\n publishedStorageEntry: initialPublishedStorageEntry\n }\n );\n }\n };\n\n const unpublish = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsUnpublishParams\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n /**\n * We need to:\n * - delete currently published entry\n * - update current entry revision with new data\n * - update latest entry status - if entry being unpublished is latest\n */\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the unpublishing one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && entry.id === latestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute unpublish batch.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n };\n\n return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n getPreviousRevision,\n getPublishedByIds,\n getLatestByIds,\n getByIds,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId,\n get,\n getRevisions,\n publish,\n list,\n unpublish\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createType","createLatestType","createPublishedType","convertToStorageEntry","params","model","storageEntry","values","convertValueKeyToStorage","fields","convertFromStorageEntry","convertValueKeyFromStorage","MAX_LIST_LIMIT","createEntriesStorageOperations","entity","plugins","storageOperationsCmsModelPlugin","getStorageOperationsCmsModelPlugin","oneByType","StorageOperationsCmsModelPlugin","type","getStorageOperationsModel","plugin","getModel","dataLoaders","DataLoadersHandler","storageTransformPlugins","byType","StorageTransformPlugin","reduce","collection","fieldType","createStorageTransformCallable","field","value","fromStorage","getStoragePlugin","create","initialModel","entry","initialStorageEntry","partitionKey","createPartitionKey","id","locale","tenant","isPublished","status","locked","items","putBatch","PK","SK","createRevisionSortKey","TYPE","GSI1_PK","createGSIPartitionKey","GSI1_SK","createGSISortKey","createLatestSortKey","push","createPublishedSortKey","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","createRevisionFrom","update","latestStorageEntry","getLatestRevisionByEntryId","deleteEntry","queryAllParams","options","gte","records","queryAll","map","item","deleteBatch","deleteRevision","latestEntry","initialLatestStorageEntry","publishedStorageEntry","getPublishedRevisionByEntryId","ids","shift","getRevisionById","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","entryId","version","queryParams","lt","zeroPad","filters","attr","eq","reverse","result","queryOne","cleanupItem","list","limit","initialLimit","where","initialWhere","after","sort","sortBy","search","published","index","storageEntries","length","hasMoreItems","totalCount","cursor","modelFields","createFields","Promise","all","fieldId","filteredItems","filter","fullTextSearch","term","sortedItems","start","parseInt","decodeCursor","end","undefined","slicedItems","slice","encodeCursor","cleanupItems","get","publish","initialPublishedStorageEntry","CONTENT_ENTRY_STATUS","UNPUBLISHED","unpublish","getUniqueFieldValues","find","f","Array","from","Set","delete"],"sources":["index.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperations,\n CmsModel,\n CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport {\n createGSIPartitionKey,\n createGSISortKey,\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport {\n queryAll,\n QueryAllParams,\n queryOne,\n QueryOneParams\n} from \"@webiny/db-dynamodb/utils/query\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils/cursor\";\nimport { zeroPad } from \"@webiny/utils/zeroPad\";\nimport { StorageOperationsCmsModelPlugin, StorageTransformPlugin } from \"@webiny/api-headless-cms\";\nimport { FilterItemFromStorage } from \"./filtering/types\";\nimport { createFields } from \"~/operations/entry/filtering/createFields\";\nimport { filter, sort } from \"~/operations/entry/filtering\";\n\nconst createType = (): string => {\n return \"cms.entry\";\n};\nconst createLatestType = (): string => {\n return `${createType()}.l`;\n};\nconst createPublishedType = (): string => {\n return `${createType()}.p`;\n};\n\ninterface ConvertStorageEntryParams {\n storageEntry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\nconst convertToStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyToStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nconst convertFromStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyFromStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nconst MAX_LIST_LIMIT = 10000;\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\n\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, plugins } = params;\n\n let storageOperationsCmsModelPlugin: StorageOperationsCmsModelPlugin | undefined;\n const getStorageOperationsCmsModelPlugin = () => {\n if (storageOperationsCmsModelPlugin) {\n return storageOperationsCmsModelPlugin;\n }\n storageOperationsCmsModelPlugin = plugins.oneByType<StorageOperationsCmsModelPlugin>(\n StorageOperationsCmsModelPlugin.type\n );\n return storageOperationsCmsModelPlugin;\n };\n\n const getStorageOperationsModel = (model: CmsModel): StorageOperationsCmsModel => {\n const plugin = getStorageOperationsCmsModelPlugin();\n return plugin.getModel(model);\n };\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const storageTransformPlugins = plugins\n .byType<StorageTransformPlugin>(StorageTransformPlugin.type)\n .reduce((collection, plugin) => {\n collection[plugin.fieldType] = plugin;\n return collection;\n }, {} as Record<string, StorageTransformPlugin>);\n\n const createStorageTransformCallable = (\n model: StorageOperationsCmsModel\n ): FilterItemFromStorage => {\n return (field, value) => {\n const plugin: StorageTransformPlugin = storageTransformPlugins[field.type];\n if (!plugin) {\n return value;\n }\n return plugin.fromStorage({\n model,\n field,\n value,\n getStoragePlugin(fieldType: string): StorageTransformPlugin {\n return storageTransformPlugins[fieldType] || storageTransformPlugins[\"*\"];\n },\n plugins\n });\n };\n };\n\n const create: CmsEntryStorageOperations[\"create\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const isPublished = entry.status === \"published\";\n\n const locked = isPublished ? true : entry.locked;\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to:\n * - create new main entry item\n * - create new or update the latest entry item\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n\n /**\n * We need to create published entry if\n */\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert data into the DynamoDB.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n return initialStorageEntry;\n };\n\n const createRevisionFrom: CmsEntryStorageOperations[\"createRevisionFrom\"] = async (\n initialModel,\n params\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n /**\n * We need to:\n * - create the main entry item\n * - update the last entry item to a current one\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create revision from given entry.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return initialStorageEntry;\n };\n\n const update: CmsEntryStorageOperations[\"update\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const isPublished = entry.status === \"published\";\n const locked = isPublished ? true : entry.locked;\n\n const items = [];\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to:\n * - update the current entry\n * - update the latest entry if the current entry is the latest one\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n }\n\n /**\n * We need the latest entry to update it as well if necessary.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry\n }\n );\n }\n };\n\n const deleteEntry: CmsEntryStorageOperations[\"delete\"] = async (initialModel, params) => {\n const { entry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n options: {\n gte: \" \"\n }\n };\n\n let records = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load all records.\",\n ex.code || \"LOAD_ALL_RECORDS_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n const items = records.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the entry.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n entry\n }\n );\n }\n };\n\n const deleteRevision: CmsEntryStorageOperations[\"deleteRevision\"] = async (\n initialModel,\n params\n ) => {\n const { entry, latestEntry, latestStorageEntry: initialLatestStorageEntry } = params;\n\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createRevisionSortKey(entry)\n })\n ];\n\n const publishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n /**\n * If revision we are deleting is the published one as well, we need to delete those records as well.\n */\n if (publishedStorageEntry && entry.id === publishedStorageEntry.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n if (initialLatestStorageEntry) {\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, {\n error: ex,\n entry,\n latestEntry\n });\n }\n };\n\n const getLatestRevisionByEntryId: CmsEntryStorageOperations[\"getLatestRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n const getPublishedRevisionByEntryId: CmsEntryStorageOperations[\"getPublishedRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisionById: CmsEntryStorageOperations[\"getRevisionById\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisions: CmsEntryStorageOperations[\"getRevisions\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getByIds: CmsEntryStorageOperations[\"getByIds\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getLatestByIds: CmsEntryStorageOperations[\"getLatestByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPublishedByIds: CmsEntryStorageOperations[\"getPublishedByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPreviousRevision: CmsEntryStorageOperations[\"getPreviousRevision\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant: model.tenant,\n locale: model.locale,\n id: entryId\n }),\n options: {\n lt: `REV#${zeroPad(version)}`,\n /**\n * We need to have extra checks because DynamoDB will return published or latest record if there is no REV# record.\n */\n filters: [\n {\n attr: \"TYPE\",\n eq: createType()\n },\n {\n attr: \"version\",\n lt: version\n }\n ],\n reverse: true\n }\n };\n\n try {\n const result = await queryOne<CmsEntry>(queryParams);\n\n const storageEntry = cleanupItem(entity, result);\n if (!storageEntry) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry,\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get previous version of given entry.\",\n ex.code || \"GET_PREVIOUS_VERSION_ERROR\",\n {\n ...params,\n error: ex,\n partitionKey: queryParams.partitionKey,\n options: queryParams.options,\n model\n }\n );\n }\n };\n\n const list: CmsEntryStorageOperations[\"list\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const {\n limit: initialLimit = 10,\n where: initialWhere,\n after,\n sort: sortBy,\n fields,\n search\n } = params;\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;\n\n const type = initialWhere.published ? \"P\" : \"L\";\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createGSIPartitionKey(model, type),\n options: {\n index: \"GSI1\",\n gte: \" \"\n }\n };\n let storageEntries: CmsStorageEntry[] = [];\n try {\n storageEntries = await queryAll<CmsStorageEntry>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(ex.message, \"QUERY_ENTRIES_ERROR\", {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n });\n }\n if (storageEntries.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n const where: Partial<CmsEntryListWhere> = {\n ...initialWhere\n };\n delete where[\"published\"];\n delete where[\"latest\"];\n /**\n * We need an object containing field, transformers and paths.\n * Just build it here and pass on into other methods that require it to avoid mapping multiple times.\n */\n const modelFields = createFields({\n plugins,\n fields: model.fields\n });\n\n const fromStorage = createStorageTransformCallable(model);\n /**\n * Let's transform records from storage ones to regular ones, so we do not need to do it later.\n *\n * This is always being done, but at least its in parallel.\n */\n const records = await Promise.all(\n storageEntries.map(async storageEntry => {\n const entry = convertFromStorageEntry({\n storageEntry,\n model\n });\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(\n field,\n entry.values[field.fieldId]\n );\n }\n\n return entry as CmsEntry;\n })\n );\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredItems = filter({\n items: records,\n where,\n plugins,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: fields || []\n }\n });\n\n const totalCount = filteredItems.length;\n\n /**\n * Sorting is also done via the code.\n * It takes the sort input and sorts by it via the lodash sortBy method.\n */\n const sortedItems = sort({\n model,\n plugins,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const end = limit > totalCount + start + limit ? undefined : start + limit;\n const slicedItems = sortedItems.slice(start, end);\n /**\n * Although we do not need a cursor here, we will use it as such to keep it standardized.\n * Number is simply encoded.\n */\n const cursor = totalCount > start + limit ? encodeCursor(`${start + limit}`) : null;\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: cleanupItems(entity, slicedItems)\n };\n };\n\n const get: CmsEntryStorageOperations[\"get\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish: CmsEntryStorageOperations[\"publish\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n /**\n * We need the latest and published entries to see if something needs to be updated alongside the publishing one.\n */\n const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n const initialPublishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to update:\n * - current entry revision sort key\n * - published sort key\n * - the latest sort key - if entry updated is actually latest\n * - previous published entry to unpublished status - if any previously published entry\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n if (initialLatestStorageEntry && entry.id === initialLatestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n if (initialPublishedStorageEntry && initialPublishedStorageEntry.id !== entry.id) {\n const publishedStorageEntry = convertToStorageEntry({\n storageEntry: initialPublishedStorageEntry,\n model\n });\n items.push(\n entity.putBatch({\n ...publishedStorageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(publishedStorageEntry),\n TYPE: createType(),\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(publishedStorageEntry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the publishing batch.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n entry,\n latestStorageEntry: initialLatestStorageEntry,\n publishedStorageEntry: initialPublishedStorageEntry\n }\n );\n }\n };\n\n const unpublish: CmsEntryStorageOperations[\"unpublish\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n /**\n * We need to:\n * - delete currently published entry\n * - update current entry revision with new data\n * - update the latest entry status - if entry being unpublished is latest\n */\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated alongside the unpublishing one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && entry.id === latestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute unpublish batch.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n };\n\n const getUniqueFieldValues: CmsEntryStorageOperations[\"getUniqueFieldValues\"] = async (\n model,\n params\n ) => {\n const { where, fieldId } = params;\n\n const field = model.fields.find(f => f.fieldId === fieldId);\n if (!field) {\n throw new WebinyError(\n `Could not find field with given \"fieldId\" value.`,\n \"FIELD_NOT_FOUND\",\n {\n fieldId\n }\n );\n }\n\n const { items } = await list(model, {\n where,\n limit: MAX_LIST_LIMIT\n });\n\n return Array.from(new Set(items.map(item => item.values[field.fieldId])));\n };\n\n return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n getPreviousRevision,\n getPublishedByIds,\n getLatestByIds,\n getByIds,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId,\n get,\n getRevisions,\n publish,\n list,\n unpublish,\n getUniqueFieldValues\n };\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms-ddb",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.606fc9c866",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"@webiny/api-headless-cms",
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@babel/runtime": "7.20.13",
|
|
25
|
-
"@webiny/api-headless-cms": "0.0.0-unstable.
|
|
26
|
-
"@webiny/db-dynamodb": "0.0.0-unstable.
|
|
27
|
-
"@webiny/error": "0.0.0-unstable.
|
|
28
|
-
"@webiny/handler-db": "0.0.0-unstable.
|
|
29
|
-
"@webiny/utils": "0.0.0-unstable.
|
|
25
|
+
"@webiny/api-headless-cms": "0.0.0-unstable.606fc9c866",
|
|
26
|
+
"@webiny/db-dynamodb": "0.0.0-unstable.606fc9c866",
|
|
27
|
+
"@webiny/error": "0.0.0-unstable.606fc9c866",
|
|
28
|
+
"@webiny/handler-db": "0.0.0-unstable.606fc9c866",
|
|
29
|
+
"@webiny/utils": "0.0.0-unstable.606fc9c866",
|
|
30
30
|
"aws-sdk": "2.1310.0",
|
|
31
31
|
"dataloader": "2.2.1",
|
|
32
32
|
"dot-prop": "6.0.1",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"@babel/core": "^7.19.3",
|
|
40
40
|
"@babel/preset-env": "^7.19.4",
|
|
41
41
|
"@types/jsonpack": "^1.1.0",
|
|
42
|
-
"@webiny/cli": "^0.0.0-unstable.
|
|
43
|
-
"@webiny/plugins": "^0.0.0-unstable.
|
|
44
|
-
"@webiny/project-utils": "^0.0.0-unstable.
|
|
42
|
+
"@webiny/cli": "^0.0.0-unstable.606fc9c866",
|
|
43
|
+
"@webiny/plugins": "^0.0.0-unstable.606fc9c866",
|
|
44
|
+
"@webiny/project-utils": "^0.0.0-unstable.606fc9c866",
|
|
45
45
|
"jest": "^28.1.0",
|
|
46
46
|
"jest-dynalite": "^3.2.0",
|
|
47
47
|
"jest-environment-node": "^27.2.4",
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"build": "yarn webiny run build",
|
|
57
57
|
"watch": "yarn webiny run watch"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "606fc9c866aec436f24983abc9bdaf02af2b8746"
|
|
60
60
|
}
|