@webiny/api-headless-cms-ddb-es 0.0.0-unstable.40876133bb → 0.0.0-unstable.496cf268ac

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.
Files changed (204) hide show
  1. package/configurations.js +0 -8
  2. package/configurations.js.map +1 -1
  3. package/definitions/entry.js +3 -5
  4. package/definitions/entry.js.map +1 -1
  5. package/definitions/entryElasticsearch.js +0 -5
  6. package/definitions/entryElasticsearch.js.map +1 -1
  7. package/definitions/group.js +0 -5
  8. package/definitions/group.js.map +1 -1
  9. package/definitions/model.js +22 -5
  10. package/definitions/model.js.map +1 -1
  11. package/definitions/settings.js +0 -5
  12. package/definitions/settings.js.map +1 -1
  13. package/definitions/system.js +0 -5
  14. package/definitions/system.js.map +1 -1
  15. package/definitions/table.js +0 -3
  16. package/definitions/table.js.map +1 -1
  17. package/definitions/tableElasticsearch.js +0 -3
  18. package/definitions/tableElasticsearch.js.map +1 -1
  19. package/dynamoDb/index.d.ts +1 -1
  20. package/dynamoDb/index.js +0 -5
  21. package/dynamoDb/index.js.map +1 -1
  22. package/dynamoDb/storage/date.d.ts +2 -1
  23. package/dynamoDb/storage/date.js +4 -17
  24. package/dynamoDb/storage/date.js.map +1 -1
  25. package/dynamoDb/storage/longText.d.ts +1 -1
  26. package/dynamoDb/storage/longText.js +10 -18
  27. package/dynamoDb/storage/longText.js.map +1 -1
  28. package/dynamoDb/storage/richText.d.ts +1 -1
  29. package/dynamoDb/storage/richText.js +12 -30
  30. package/dynamoDb/storage/richText.js.map +1 -1
  31. package/elasticsearch/createElasticsearchIndex.js +0 -11
  32. package/elasticsearch/createElasticsearchIndex.js.map +1 -1
  33. package/elasticsearch/deleteElasticsearchIndex.js +0 -7
  34. package/elasticsearch/deleteElasticsearchIndex.js.map +1 -1
  35. package/elasticsearch/index.js +0 -5
  36. package/elasticsearch/index.js.map +1 -1
  37. package/elasticsearch/indexing/dateTimeIndexing.js +4 -21
  38. package/elasticsearch/indexing/dateTimeIndexing.js.map +1 -1
  39. package/elasticsearch/indexing/defaultFieldIndexing.js +15 -10
  40. package/elasticsearch/indexing/defaultFieldIndexing.js.map +1 -1
  41. package/elasticsearch/indexing/index.js +0 -9
  42. package/elasticsearch/indexing/index.js.map +1 -1
  43. package/elasticsearch/indexing/longTextIndexing.d.ts +4 -0
  44. package/elasticsearch/indexing/longTextIndexing.js +19 -9
  45. package/elasticsearch/indexing/longTextIndexing.js.map +1 -1
  46. package/elasticsearch/indexing/numberIndexing.js +0 -9
  47. package/elasticsearch/indexing/numberIndexing.js.map +1 -1
  48. package/elasticsearch/indexing/objectIndexing.js +3 -30
  49. package/elasticsearch/indexing/objectIndexing.js.map +1 -1
  50. package/elasticsearch/indexing/richTextIndexing.js +0 -5
  51. package/elasticsearch/indexing/richTextIndexing.js.map +1 -1
  52. package/elasticsearch/indices/base.js +0 -3
  53. package/elasticsearch/indices/base.js.map +1 -1
  54. package/elasticsearch/indices/index.js +0 -4
  55. package/elasticsearch/indices/index.js.map +1 -1
  56. package/elasticsearch/indices/japanese.js +0 -3
  57. package/elasticsearch/indices/japanese.js.map +1 -1
  58. package/elasticsearch/search/index.js +0 -4
  59. package/elasticsearch/search/index.js.map +1 -1
  60. package/elasticsearch/search/refSearch.js +4 -8
  61. package/elasticsearch/search/refSearch.js.map +1 -1
  62. package/elasticsearch/search/timeSearch.js +0 -7
  63. package/elasticsearch/search/timeSearch.js.map +1 -1
  64. package/helpers/entryIndexHelpers.js +20 -49
  65. package/helpers/entryIndexHelpers.js.map +1 -1
  66. package/helpers/index.d.ts +0 -1
  67. package/helpers/index.js +0 -15
  68. package/helpers/index.js.map +1 -1
  69. package/index.js +19 -73
  70. package/index.js.map +1 -1
  71. package/operations/entry/dataLoaders.js +0 -52
  72. package/operations/entry/dataLoaders.js.map +1 -1
  73. package/operations/entry/elasticsearch/assignMinimumShouldMatchToQuery.d.ts +18 -0
  74. package/operations/entry/elasticsearch/assignMinimumShouldMatchToQuery.js +32 -0
  75. package/operations/entry/elasticsearch/assignMinimumShouldMatchToQuery.js.map +1 -0
  76. package/operations/entry/elasticsearch/body.d.ts +13 -0
  77. package/operations/entry/elasticsearch/body.js +140 -0
  78. package/operations/entry/elasticsearch/body.js.map +1 -0
  79. package/operations/entry/elasticsearch/fields.d.ts +9 -0
  80. package/operations/entry/elasticsearch/fields.js +229 -0
  81. package/operations/entry/elasticsearch/fields.js.map +1 -0
  82. package/operations/entry/elasticsearch/filtering/applyFiltering.d.ts +8 -0
  83. package/operations/entry/elasticsearch/filtering/applyFiltering.js +57 -0
  84. package/operations/entry/elasticsearch/filtering/applyFiltering.js.map +1 -0
  85. package/operations/entry/elasticsearch/filtering/exec.d.ts +17 -0
  86. package/operations/entry/elasticsearch/filtering/exec.js +172 -0
  87. package/operations/entry/elasticsearch/filtering/exec.js.map +1 -0
  88. package/operations/entry/elasticsearch/filtering/index.d.ts +1 -0
  89. package/operations/entry/elasticsearch/filtering/index.js +16 -0
  90. package/operations/entry/elasticsearch/filtering/index.js.map +1 -0
  91. package/operations/entry/elasticsearch/filtering/path.d.ts +15 -0
  92. package/operations/entry/elasticsearch/filtering/path.js +44 -0
  93. package/operations/entry/elasticsearch/filtering/path.js.map +1 -0
  94. package/operations/entry/elasticsearch/filtering/plugins/defaultFilterPlugin.d.ts +2 -0
  95. package/operations/entry/elasticsearch/filtering/plugins/defaultFilterPlugin.js +28 -0
  96. package/operations/entry/elasticsearch/filtering/plugins/defaultFilterPlugin.js.map +1 -0
  97. package/operations/entry/elasticsearch/filtering/plugins/index.d.ts +1 -0
  98. package/operations/entry/elasticsearch/filtering/plugins/index.js +13 -0
  99. package/operations/entry/elasticsearch/filtering/plugins/index.js.map +1 -0
  100. package/operations/entry/elasticsearch/filtering/plugins/objectFilterPlugin.d.ts +2 -0
  101. package/operations/entry/elasticsearch/filtering/plugins/objectFilterPlugin.js +65 -0
  102. package/operations/entry/elasticsearch/filtering/plugins/objectFilterPlugin.js.map +1 -0
  103. package/operations/entry/elasticsearch/filtering/plugins/refFilterPlugin.d.ts +2 -0
  104. package/operations/entry/elasticsearch/filtering/plugins/refFilterPlugin.js +48 -0
  105. package/operations/entry/elasticsearch/filtering/plugins/refFilterPlugin.js.map +1 -0
  106. package/operations/entry/elasticsearch/filtering/populated.d.ts +2 -0
  107. package/operations/entry/elasticsearch/filtering/populated.js +23 -0
  108. package/operations/entry/elasticsearch/filtering/populated.js.map +1 -0
  109. package/operations/entry/elasticsearch/filtering/values.d.ts +2 -0
  110. package/operations/entry/elasticsearch/filtering/values.js +22 -0
  111. package/operations/entry/elasticsearch/filtering/values.js.map +1 -0
  112. package/operations/entry/elasticsearch/fullTextSearch.d.ts +12 -0
  113. package/operations/entry/elasticsearch/fullTextSearch.js +89 -0
  114. package/operations/entry/elasticsearch/fullTextSearch.js.map +1 -0
  115. package/operations/entry/elasticsearch/fullTextSearchFields.d.ts +8 -0
  116. package/operations/entry/elasticsearch/fullTextSearchFields.js +25 -0
  117. package/operations/entry/elasticsearch/fullTextSearchFields.js.map +1 -0
  118. package/operations/entry/elasticsearch/initialQuery.d.ts +17 -0
  119. package/operations/entry/elasticsearch/initialQuery.js +103 -0
  120. package/operations/entry/elasticsearch/initialQuery.js.map +1 -0
  121. package/operations/entry/elasticsearch/keyword.d.ts +2 -0
  122. package/operations/entry/elasticsearch/keyword.js +34 -0
  123. package/operations/entry/elasticsearch/keyword.js.map +1 -0
  124. package/operations/entry/elasticsearch/plugins/bodyModifier.d.ts +9 -0
  125. package/operations/entry/elasticsearch/plugins/bodyModifier.js +16 -0
  126. package/operations/entry/elasticsearch/plugins/bodyModifier.js.map +1 -0
  127. package/operations/entry/elasticsearch/plugins/operator.d.ts +8 -0
  128. package/operations/entry/elasticsearch/plugins/operator.js +37 -0
  129. package/operations/entry/elasticsearch/plugins/operator.js.map +1 -0
  130. package/operations/entry/elasticsearch/plugins/queryModifier.d.ts +9 -0
  131. package/operations/entry/elasticsearch/plugins/queryModifier.js +16 -0
  132. package/operations/entry/elasticsearch/plugins/queryModifier.js.map +1 -0
  133. package/operations/entry/elasticsearch/plugins/search.d.ts +7 -0
  134. package/{helpers/searchPluginsList.js → operations/entry/elasticsearch/plugins/search.js} +7 -9
  135. package/operations/entry/elasticsearch/plugins/search.js.map +1 -0
  136. package/operations/entry/elasticsearch/plugins/sortModifier.d.ts +9 -0
  137. package/operations/entry/elasticsearch/plugins/sortModifier.js +16 -0
  138. package/operations/entry/elasticsearch/plugins/sortModifier.js.map +1 -0
  139. package/operations/entry/elasticsearch/sort.d.ts +12 -0
  140. package/operations/entry/elasticsearch/sort.js +82 -0
  141. package/operations/entry/elasticsearch/sort.js.map +1 -0
  142. package/operations/entry/elasticsearch/transformValueForSearch.d.ts +16 -0
  143. package/{helpers → operations/entry/elasticsearch}/transformValueForSearch.js +7 -6
  144. package/operations/entry/elasticsearch/transformValueForSearch.js.map +1 -0
  145. package/operations/entry/elasticsearch/types.d.ts +41 -0
  146. package/operations/entry/elasticsearch/types.js +5 -0
  147. package/operations/entry/elasticsearch/types.js.map +1 -0
  148. package/operations/entry/index.d.ts +0 -2
  149. package/operations/entry/index.js +72 -210
  150. package/operations/entry/index.js.map +1 -1
  151. package/operations/entry/keys.js +0 -9
  152. package/operations/entry/keys.js.map +1 -1
  153. package/operations/entry/recordType.d.ts +3 -0
  154. package/operations/entry/recordType.js +18 -0
  155. package/operations/entry/recordType.js.map +1 -0
  156. package/operations/group/index.js +2 -32
  157. package/operations/group/index.js.map +1 -1
  158. package/operations/model/index.js +1 -34
  159. package/operations/model/index.js.map +1 -1
  160. package/operations/settings/index.js +0 -24
  161. package/operations/settings/index.js.map +1 -1
  162. package/operations/system/index.js +0 -17
  163. package/operations/system/index.js.map +1 -1
  164. package/package.json +16 -16
  165. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.d.ts +1 -0
  166. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.js +6 -8
  167. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.js.map +1 -1
  168. package/plugins/CmsEntryElasticsearchFieldPlugin.js +0 -6
  169. package/plugins/CmsEntryElasticsearchFieldPlugin.js.map +1 -1
  170. package/plugins/CmsEntryElasticsearchFullTextSearchPlugin.d.ts +23 -0
  171. package/plugins/CmsEntryElasticsearchFullTextSearchPlugin.js +28 -0
  172. package/plugins/CmsEntryElasticsearchFullTextSearchPlugin.js.map +1 -0
  173. package/plugins/CmsEntryElasticsearchIndexPlugin.js +0 -5
  174. package/plugins/CmsEntryElasticsearchIndexPlugin.js.map +1 -1
  175. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.d.ts +1 -0
  176. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.js +6 -12
  177. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.js.map +1 -1
  178. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.d.ts +1 -0
  179. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.js +6 -8
  180. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.js.map +1 -1
  181. package/plugins/CmsEntryElasticsearchSortModifierPlugin.d.ts +1 -0
  182. package/plugins/CmsEntryElasticsearchSortModifierPlugin.js +6 -8
  183. package/plugins/CmsEntryElasticsearchSortModifierPlugin.js.map +1 -1
  184. package/plugins/CmsEntryFilterPlugin.d.ts +49 -0
  185. package/plugins/CmsEntryFilterPlugin.js +24 -0
  186. package/plugins/CmsEntryFilterPlugin.js.map +1 -0
  187. package/plugins/index.d.ts +1 -0
  188. package/plugins/index.js +11 -12
  189. package/plugins/index.js.map +1 -1
  190. package/types.js +0 -5
  191. package/types.js.map +1 -1
  192. package/helpers/createElasticsearchQueryBody.d.ts +0 -11
  193. package/helpers/createElasticsearchQueryBody.js +0 -611
  194. package/helpers/createElasticsearchQueryBody.js.map +0 -1
  195. package/helpers/fields.d.ts +0 -19
  196. package/helpers/fields.js +0 -205
  197. package/helpers/fields.js.map +0 -1
  198. package/helpers/searchPluginsList.d.ts +0 -6
  199. package/helpers/searchPluginsList.js.map +0 -1
  200. package/helpers/transformValueForSearch.d.ts +0 -12
  201. package/helpers/transformValueForSearch.js.map +0 -1
  202. package/operations/entry/elasticsearchFields.d.ts +0 -2
  203. package/operations/entry/elasticsearchFields.js +0 -38
  204. package/operations/entry/elasticsearchFields.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["createType","createLatestType","createPublishedType","getEntryData","entry","lodashOmit","TYPE","__type","getESLatestEntryData","plugins","compress","latest","getESPublishedEntryData","published","convertToStorageEntry","params","model","values","convertValueKeyToStorage","fields","convertFromStorageEntry","convertValueKeyFromStorage","createEntriesStorageOperations","entity","esEntity","elasticsearch","dataLoaders","DataLoadersHandler","create","initialEntry","storageEntry","initialStorageEntry","isPublished","status","locked","esEntry","prepareEntryToIndex","lodashCloneDeep","index","esIndex","configurations","es","esLatestData","esPublishedData","revisionKeys","PK","createPartitionKey","id","locale","tenant","SK","createRevisionSortKey","latestKeys","createLatestSortKey","publishedKeys","createPublishedSortKey","items","putBatch","push","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","esItems","data","createRevisionFrom","put","update","latestStorageEntry","getLatestRevisionByEntryId","ids","publishedStorageEntry","getPublishedRevisionByEntryId","undefined","elasticsearchLatestData","elasticsearchPublishedData","length","deleteEntry","partitionKey","queryAll","options","gte","deleteItems","map","item","deleteBatch","deleteEsItems","deleteRevision","latestEntry","list","limit","createLimit","result","indices","exists","body","hasMoreItems","totalCount","cursor","createElasticsearchQueryBody","args","parentPath","response","search","hits","total","extractEntriesFromIndex","entries","_source","pop","encodeCursor","sort","value","get","shift","publish","latestEsEntry","getRecord","keys","previouslyPublishedEntry","getRevisionById","CONTENT_ENTRY_STATUS","UNPUBLISHED","savedOn","latestEsEntryDataDecompressed","decompress","PUBLISHED","publishedOn","preparedEntryData","unpublish","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","entryId","version","queryParams","lt","zeroPad","filters","attr","eq","reverse","queryOne","cleanupItem","delete"],"sources":["index.ts"],"sourcesContent":["import {\n CmsEntry,\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 CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport {\n createElasticsearchQueryBody,\n extractEntriesFromIndex,\n prepareEntryToIndex\n} from \"~/helpers\";\nimport { configurations } from \"~/configurations\";\nimport WebinyError from \"@webiny/error\";\nimport lodashCloneDeep from \"lodash/cloneDeep\";\nimport lodashOmit from \"lodash/omit\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { DataLoadersHandler } from \"~/operations/entry/dataLoaders\";\nimport {\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { queryAll, queryOne, QueryOneParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { createLimit, encodeCursor, compress, decompress } from \"@webiny/api-elasticsearch\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { ElasticsearchSearchResponse } from \"@webiny/api-elasticsearch/types\";\nimport { CmsIndexEntry } from \"~/types\";\n\nconst createType = (): string => {\n return \"cms.entry\";\n};\nexport const createLatestType = (): string => {\n return `${createType()}.l`;\n};\nexport const createPublishedType = (): string => {\n return `${createType()}.p`;\n};\n\nconst getEntryData = (entry: CmsEntry) => {\n return {\n ...lodashOmit(entry, [\"PK\", \"SK\", \"published\", \"latest\"]),\n TYPE: createType(),\n __type: createType()\n };\n};\n\nconst getESLatestEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n latest: true,\n TYPE: createLatestType(),\n __type: createLatestType()\n });\n};\n\nconst getESPublishedEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n published: true,\n TYPE: createPublishedType(),\n __type: createPublishedType()\n });\n};\n\ninterface ConvertStorageEntryParams {\n entry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\nconst convertToStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, entry } = params;\n\n const values = model.convertValueKeyToStorage({\n fields: model.fields,\n values: entry.values\n });\n return {\n ...entry,\n values\n };\n};\n\nconst convertFromStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, entry } = params;\n\n const values = model.convertValueKeyFromStorage({\n fields: model.fields,\n values: entry.values\n });\n return {\n ...entry,\n values\n };\n};\n\ninterface ElasticsearchDbRecord {\n index: string;\n data: Record<string, string>;\n}\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, esEntity, elasticsearch, plugins } = params;\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const create = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const isPublished = initialEntry.status === \"published\";\n const locked = isPublished ? true : initialEntry.locked;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({ ...entry, locked }),\n storageEntry: lodashCloneDeep({ ...storageEntry, locked })\n });\n\n const { index: esIndex } = configurations.es({\n model\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n const esPublishedData = await getESPublishedEntryData(plugins, esEntry);\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n ...revisionKeys,\n TYPE: createType()\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n ...latestKeys,\n TYPE: createLatestType()\n })\n ];\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedType()\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 entry data into the DynamoDB table.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n\n const esItems = [\n esEntity.putBatch({\n ...latestKeys,\n index: esIndex,\n data: esLatestData\n })\n ];\n if (isPublished) {\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index: esIndex,\n data: esPublishedData\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert entry data into the Elasticsearch DynamoDB table.\",\n ex.code || \"CREATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n esEntry\n }\n );\n }\n\n return initialStorageEntry;\n };\n\n const createRevisionFrom = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createType(),\n ...revisionKeys\n }),\n entity.putBatch({\n ...storageEntry,\n TYPE: createLatestType(),\n ...latestKeys\n })\n ];\n\n const { index } = configurations.es({\n model\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 in the DynamoDB table.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n /**\n * Update the \"latest\" entry item in the Elasticsearch\n */\n try {\n await esEntity.put({\n ...latestKeys,\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update latest entry in the DynamoDB Elasticsearch table.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry\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: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n const isPublished = entry.status === \"published\";\n const locked = isPublished ? true : entry.locked;\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedType()\n })\n );\n }\n\n const esItems = [];\n\n const { index: esIndex } = configurations.es({\n model\n });\n /**\n * Variable for the elasticsearch entry so we do not convert it more than once\n */\n let esEntry: CmsIndexEntry | undefined = undefined;\n /**\n * If the latest entry is the one being updated, we need to create a new latest entry records.\n */\n let elasticsearchLatestData: any = null;\n if (latestStorageEntry?.id === entry.id) {\n /**\n * First we update the regular DynamoDB table\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...latestKeys,\n TYPE: createLatestSortKey()\n })\n );\n /**\n * And then update the Elasticsearch table to propagate changes to the Elasticsearch\n */\n esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({\n ...entry,\n locked\n }),\n storageEntry: lodashCloneDeep({\n ...storageEntry,\n locked\n })\n });\n\n elasticsearchLatestData = await getESLatestEntryData(plugins, esEntry);\n\n esItems.push(\n esEntity.putBatch({\n ...latestKeys,\n index: esIndex,\n data: elasticsearchLatestData\n })\n );\n }\n let elasticsearchPublishedData = null;\n if (isPublished && publishedStorageEntry?.id === entry.id) {\n if (!elasticsearchLatestData) {\n /**\n * And then update the Elasticsearch table to propagate changes to the Elasticsearch\n */\n if (!esEntry) {\n esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({\n ...entry,\n locked\n }),\n storageEntry: lodashCloneDeep({\n ...storageEntry,\n locked\n })\n });\n }\n elasticsearchPublishedData = await getESPublishedEntryData(plugins, esEntry);\n } else {\n elasticsearchPublishedData = {\n ...elasticsearchLatestData,\n published: true,\n TYPE: createPublishedType(),\n __type: createPublishedType()\n };\n delete elasticsearchPublishedData.latest;\n }\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index: esIndex,\n data: elasticsearchPublishedData\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 update entry DynamoDB records.\",\n ex.code || \"UPDATE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n if (esItems.length === 0) {\n return initialStorageEntry;\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry DynamoDB Elasticsearch records.\",\n ex.code || \"UPDATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const deleteEntry = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteParams\n ) => {\n const { entry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const items = await queryAll<CmsEntry>({\n entity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const esItems = await queryAll<CmsEntry>({\n entity: esEntity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const deleteItems = items.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n const deleteEsItems = esItems.map(item => {\n return esEntity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items: deleteItems\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: deleteEsItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB Elasticsearch table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n };\n\n const deleteRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const { index } = configurations.es({\n model\n });\n /**\n * We need published entry to delete it if necessary.\n */\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n /**\n * We need to delete all existing records of the given entry revision.\n */\n const items = [\n /**\n * Delete records of given entry revision.\n */\n entity.deleteBatch({\n PK: partitionKey,\n SK: createRevisionSortKey(entry)\n })\n ];\n\n const esItems = [];\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?.id === entry.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n esItems.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n if (latestEntry && latestStorageEntry) {\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(latestEntry),\n storageEntry: lodashCloneDeep(latestStorageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n /**\n * In the end we need to set the new latest entry\n */\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write entry records to DynamoDB table.\",\n ex.code || \"DELETE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n latestEntry,\n latestStorageEntry\n }\n );\n }\n\n if (esItems.length === 0) {\n return;\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not batch write entry records to DynamoDB Elasticsearch table.\",\n ex.code || \"DELETE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n latestEntry,\n latestStorageEntry\n }\n );\n }\n };\n\n const list = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsListParams\n ) => {\n const limit = createLimit(params.limit, 50);\n const { index } = configurations.es({\n model\n });\n\n try {\n const result = await elasticsearch.indices.exists({\n index\n });\n if (!result || !result.body) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n } catch (ex) {\n throw new WebinyError(\n \"Could not determine if Elasticsearch index exists.\",\n \"ELASTICSEARCH_INDEX_CHECK_ERROR\",\n {\n error: ex,\n index\n }\n );\n }\n\n const body = createElasticsearchQueryBody({\n model,\n args: {\n ...params,\n limit\n },\n plugins,\n parentPath: \"values\"\n });\n\n let response: ElasticsearchSearchResponse;\n try {\n response = await elasticsearch.search({\n index,\n body\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"ELASTICSEARCH_ERROR\", {\n error: ex,\n index,\n body,\n model\n });\n }\n\n const { hits, total } = response.body.hits;\n\n const items = extractEntriesFromIndex({\n plugins,\n model,\n entries: hits.map(item => item._source)\n }).map(item => {\n return convertFromStorageEntry({\n model,\n entry: item\n });\n });\n\n const hasMoreItems = items.length > limit;\n if (hasMoreItems) {\n /**\n * Remove the last item from results, we don't want to include it.\n */\n items.pop();\n }\n /**\n * Cursor is the `sort` value of the last item in the array.\n * https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#search-after\n */\n const cursor = items.length > 0 ? encodeCursor(hits[items.length - 1].sort) || null : null;\n return {\n hasMoreItems,\n totalCount: total.value,\n cursor,\n items\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: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n /**\n * We need currently published entry to check if need to remove it.\n */\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n let latestEsEntry: ElasticsearchDbRecord | null = null;\n try {\n latestEsEntry = await getRecord<ElasticsearchDbRecord>({\n entity: esEntity,\n keys: latestKeys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read Elasticsearch latest or published data.\",\n ex.code || \"PUBLISH_BATCH_READ\",\n {\n error: ex,\n latestKeys: latestKeys,\n publishedKeys: publishedKeys\n }\n );\n }\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n const esItems = [];\n\n const { index } = configurations.es({\n model\n });\n\n if (publishedStorageEntry && publishedStorageEntry.id !== entry.id) {\n /**\n * If there is a `published` entry already, we need to set it to `unpublished`. We need to\n * execute two updates: update the previously published entry's status and the published entry record.\n * DynamoDB does not support `batchUpdate` - so here we load the previously published\n * entry's data to update its status within a batch operation. If, hopefully,\n * they introduce a true update batch operation, remove this `read` call.\n */\n const [previouslyPublishedEntry] = await dataLoaders.getRevisionById({\n model,\n ids: [publishedStorageEntry.id]\n });\n //\n // const previouslyPublishedEntry = convertToStorageEntry({\n // model,\n // entry: initialPreviouslyPublishedEntry\n // });\n\n items.push(\n /**\n * Update currently published entry (unpublish it)\n */\n entity.putBatch({\n ...previouslyPublishedEntry,\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n savedOn: entry.savedOn,\n TYPE: createType(),\n PK: createPartitionKey(publishedStorageEntry),\n SK: createRevisionSortKey(publishedStorageEntry)\n })\n );\n }\n /**\n * Update the helper item in DB with the new published entry\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...publishedKeys,\n TYPE: createPublishedType()\n })\n );\n\n /**\n * We need the latest entry to check if it needs to be updated as well in the Elasticsearch.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n if (latestStorageEntry?.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...latestKeys\n })\n );\n }\n /**\n * If we are publishing the latest revision, let's also update the latest revision's status in ES.\n */\n if (latestEsEntry && latestStorageEntry?.id === entry.id) {\n /**\n * Need to decompress the data from Elasticsearch DynamoDB table.\n *\n * No need to transform it for the storage because it was fetched directly from the Elasticsearch table, where it sits transformed.\n */\n const latestEsEntryDataDecompressed: CmsEntry = (await decompress(\n plugins,\n latestEsEntry.data\n )) as any;\n\n esItems.push(\n esEntity.putBatch({\n index,\n PK: createPartitionKey(latestEsEntryDataDecompressed),\n SK: createLatestSortKey(),\n data: {\n ...latestEsEntryDataDecompressed,\n status: CONTENT_ENTRY_STATUS.PUBLISHED,\n locked: true,\n savedOn: entry.savedOn,\n publishedOn: entry.publishedOn\n }\n })\n );\n }\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n /**\n * Update the published revision entry in ES.\n */\n const esLatestData = await getESPublishedEntryData(plugins, preparedEntryData);\n\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index,\n data: esLatestData\n })\n );\n\n /**\n * Finally, execute regular table batch.\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 store publish entry records in DynamoDB table.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store publish entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"PUBLISH_ES_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const unpublish = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsUnpublishParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\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: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n })\n ];\n\n const esItems = [\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n ];\n /**\n * If we are unpublishing the latest revision, let's also update the latest revision entry's status in ES.\n */\n if (latestStorageEntry?.id === entry.id) {\n const { index } = configurations.es({\n model\n });\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n /**\n * Finally, execute regular table batch.\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 store unpublished entry records in DynamoDB table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store unpublished entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const getLatestRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const [entry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n model,\n entry\n });\n };\n const getPublishedRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const [entry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n model,\n entry\n });\n };\n\n const getRevisionById = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const [entry] = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n model,\n entry\n });\n };\n\n const getRevisions = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n const entries = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetByIdsParams\n ) => {\n const entries = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getLatestByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n const entries = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getPublishedByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n const entries = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getPreviousRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPreviousRevisionParams\n ) => {\n const { tenant, locale } = model;\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n 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 entry = cleanupItem(entity, result);\n\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n entry,\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 return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n get,\n publish,\n unpublish,\n list,\n getLatestRevisionByEntryId,\n getPublishedRevisionByEntryId,\n getRevisionById,\n getRevisions,\n getByIds,\n getLatestByIds,\n getPublishedByIds,\n getPreviousRevision\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["getEntryData","input","output","getESLatestEntryData","plugins","entry","compress","latest","TYPE","createLatestRecordType","__type","getESPublishedEntryData","published","createPublishedRecordType","convertEntryKeysToStorage","params","model","values","convertValueKeyToStorage","fields","convertEntryKeysFromStorage","convertValueKeyFromStorage","createEntriesStorageOperations","entity","esEntity","elasticsearch","dataLoaders","DataLoadersHandler","create","initialEntry","storageEntry","initialStorageEntry","isPublished","status","locked","esEntry","prepareEntryToIndex","lodashCloneDeep","index","esIndex","configurations","es","esLatestData","esPublishedData","revisionKeys","PK","createPartitionKey","id","locale","tenant","SK","createRevisionSortKey","latestKeys","createLatestSortKey","publishedKeys","createPublishedSortKey","items","putBatch","createRecordType","push","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","esItems","data","createRevisionFrom","put","update","latestStorageEntry","getLatestRevisionByEntryId","ids","publishedStorageEntry","getPublishedRevisionByEntryId","undefined","elasticsearchLatestData","elasticsearchPublishedData","length","deleteEntry","partitionKey","queryAll","options","gte","deleteItems","map","item","deleteBatch","deleteEsItems","deleteRevision","latestEntry","list","limit","createLimit","result","indices","exists","body","hasMoreItems","totalCount","cursor","createElasticsearchBody","after","decodeCursor","response","search","hits","total","extractEntriesFromIndex","entries","_source","pop","encodeCursor","sort","value","get","shift","publish","latestEsEntry","getRecord","keys","previouslyPublishedEntry","getRevisionById","CONTENT_ENTRY_STATUS","UNPUBLISHED","savedOn","latestEsEntryDataDecompressed","decompress","PUBLISHED","publishedOn","preparedEntryData","unpublish","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","entryId","version","queryParams","lt","zeroPad","filters","attr","eq","reverse","queryOne","cleanupItem","delete"],"sources":["index.ts"],"sourcesContent":["import lodashCloneDeep from \"lodash/cloneDeep\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsEntry,\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 CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport { extractEntriesFromIndex, prepareEntryToIndex } from \"~/helpers\";\nimport { configurations } from \"~/configurations\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { DataLoadersHandler } from \"~/operations/entry/dataLoaders\";\nimport {\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { queryAll, queryOne, QueryOneParams } from \"@webiny/db-dynamodb/utils/query\";\nimport {\n createLimit,\n encodeCursor,\n compress,\n decompress,\n decodeCursor\n} from \"@webiny/api-elasticsearch\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { ElasticsearchSearchResponse } from \"@webiny/api-elasticsearch/types\";\nimport { CmsIndexEntry } from \"~/types\";\nimport { createElasticsearchBody } from \"~/operations/entry/elasticsearch/body\";\nimport { createLatestRecordType, createPublishedRecordType, createRecordType } from \"./recordType\";\n\nconst getEntryData = (input: CmsEntry): CmsEntry => {\n const output: any = {\n ...input\n };\n delete output[\"PK\"];\n delete output[\"SK\"];\n delete output[\"published\"];\n delete output[\"latest\"];\n\n return output;\n};\n\nconst getESLatestEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n latest: true,\n TYPE: createLatestRecordType(),\n __type: createLatestRecordType()\n });\n};\n\nconst getESPublishedEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n published: true,\n TYPE: createPublishedRecordType(),\n __type: createPublishedRecordType()\n });\n};\n\ninterface ConvertStorageEntryParams {\n entry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\nconst convertEntryKeysToStorage = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, entry } = params;\n\n const values = model.convertValueKeyToStorage({\n fields: model.fields,\n values: entry.values\n });\n return {\n ...entry,\n values\n };\n};\n\nconst convertEntryKeysFromStorage = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, entry } = params;\n\n const values = model.convertValueKeyFromStorage({\n fields: model.fields,\n values: entry.values\n });\n return {\n ...entry,\n values\n };\n};\n\ninterface ElasticsearchDbRecord {\n index: string;\n data: Record<string, string>;\n}\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, esEntity, elasticsearch, plugins } = params;\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const create = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const isPublished = initialEntry.status === \"published\";\n const locked = isPublished ? true : initialEntry.locked;\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\n model,\n entry: initialStorageEntry\n });\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({ ...entry, locked }),\n storageEntry: lodashCloneDeep({ ...storageEntry, locked })\n });\n\n const { index: esIndex } = configurations.es({\n model\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n const esPublishedData = await getESPublishedEntryData(plugins, esEntry);\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n ...revisionKeys,\n TYPE: createRecordType()\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n ...latestKeys,\n TYPE: createLatestRecordType()\n })\n ];\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedRecordType()\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 entry data into the DynamoDB table.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n\n const esItems = [\n esEntity.putBatch({\n ...latestKeys,\n index: esIndex,\n data: esLatestData\n })\n ];\n if (isPublished) {\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index: esIndex,\n data: esPublishedData\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert entry data into the Elasticsearch DynamoDB table.\",\n ex.code || \"CREATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n esEntry\n }\n );\n }\n\n return initialStorageEntry;\n };\n\n const createRevisionFrom = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\n model,\n entry: initialStorageEntry\n });\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createRecordType(),\n ...revisionKeys\n }),\n entity.putBatch({\n ...storageEntry,\n TYPE: createLatestRecordType(),\n ...latestKeys\n })\n ];\n\n const { index } = configurations.es({\n model\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 in the DynamoDB table.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n /**\n * Update the \"latest\" entry item in the Elasticsearch\n */\n try {\n await esEntity.put({\n ...latestKeys,\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update latest entry in the DynamoDB Elasticsearch table.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry\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: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\n model,\n entry: initialStorageEntry\n });\n\n const isPublished = entry.status === \"published\";\n const locked = isPublished ? true : entry.locked;\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n ...revisionKeys,\n TYPE: createRecordType()\n })\n ];\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedRecordType()\n })\n );\n }\n\n const esItems = [];\n\n const { index: esIndex } = configurations.es({\n model\n });\n /**\n * Variable for the elasticsearch entry so we do not convert it more than once\n */\n let esEntry: CmsIndexEntry | undefined = undefined;\n /**\n * If the latest entry is the one being updated, we need to create a new latest entry records.\n */\n let elasticsearchLatestData: any = null;\n if (latestStorageEntry?.id === entry.id) {\n /**\n * First we update the regular DynamoDB table\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...latestKeys,\n TYPE: createLatestSortKey()\n })\n );\n /**\n * And then update the Elasticsearch table to propagate changes to the Elasticsearch\n */\n esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({\n ...entry,\n locked\n }),\n storageEntry: lodashCloneDeep({\n ...storageEntry,\n locked\n })\n });\n\n elasticsearchLatestData = await getESLatestEntryData(plugins, esEntry);\n\n esItems.push(\n esEntity.putBatch({\n ...latestKeys,\n index: esIndex,\n data: elasticsearchLatestData\n })\n );\n }\n let elasticsearchPublishedData = null;\n if (isPublished && publishedStorageEntry?.id === entry.id) {\n if (!elasticsearchLatestData) {\n /**\n * And then update the Elasticsearch table to propagate changes to the Elasticsearch\n */\n if (!esEntry) {\n esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({\n ...entry,\n locked\n }),\n storageEntry: lodashCloneDeep({\n ...storageEntry,\n locked\n })\n });\n }\n elasticsearchPublishedData = await getESPublishedEntryData(plugins, esEntry);\n } else {\n elasticsearchPublishedData = {\n ...elasticsearchLatestData,\n published: true,\n TYPE: createPublishedRecordType(),\n __type: createPublishedRecordType()\n };\n delete elasticsearchPublishedData.latest;\n }\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index: esIndex,\n data: elasticsearchPublishedData\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 update entry DynamoDB records.\",\n ex.code || \"UPDATE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n if (esItems.length === 0) {\n return initialStorageEntry;\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry DynamoDB Elasticsearch records.\",\n ex.code || \"UPDATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const deleteEntry = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteParams\n ) => {\n const { entry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const items = await queryAll<CmsEntry>({\n entity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const esItems = await queryAll<CmsEntry>({\n entity: esEntity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const deleteItems = items.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n const deleteEsItems = esItems.map(item => {\n return esEntity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items: deleteItems\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: deleteEsItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB Elasticsearch table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n };\n\n const deleteRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const { index } = configurations.es({\n model\n });\n /**\n * We need published entry to delete it if necessary.\n */\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n /**\n * We need to delete all existing records of the given entry revision.\n */\n const items = [\n /**\n * Delete records of given entry revision.\n */\n entity.deleteBatch({\n PK: partitionKey,\n SK: createRevisionSortKey(entry)\n })\n ];\n\n const esItems = [];\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?.id === entry.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n esItems.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n if (latestEntry && latestStorageEntry) {\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(latestEntry),\n storageEntry: lodashCloneDeep(latestStorageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n /**\n * In the end we need to set the new latest entry\n */\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestRecordType()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write entry records to DynamoDB table.\",\n ex.code || \"DELETE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n latestEntry,\n latestStorageEntry\n }\n );\n }\n\n if (esItems.length === 0) {\n return;\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not batch write entry records to DynamoDB Elasticsearch table.\",\n ex.code || \"DELETE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n latestEntry,\n latestStorageEntry\n }\n );\n }\n };\n\n const list = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsListParams\n ) => {\n const limit = createLimit(params.limit, 50);\n const { index } = configurations.es({\n model\n });\n\n try {\n const result = await elasticsearch.indices.exists({\n index\n });\n if (!result?.body) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n } catch (ex) {\n throw new WebinyError(\n \"Could not determine if Elasticsearch index exists.\",\n \"ELASTICSEARCH_INDEX_CHECK_ERROR\",\n {\n error: ex,\n index\n }\n );\n }\n\n const body = createElasticsearchBody({\n model,\n params: {\n ...params,\n limit,\n after: decodeCursor(params.after)\n },\n plugins\n });\n\n let response: ElasticsearchSearchResponse<CmsIndexEntry>;\n try {\n response = await elasticsearch.search({\n index,\n body\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"ELASTICSEARCH_ERROR\", {\n error: ex,\n index,\n body,\n model\n });\n }\n\n const { hits, total } = response?.body?.hits || {};\n\n const items = extractEntriesFromIndex({\n plugins,\n model,\n entries: hits.map(item => item._source)\n }).map(item => {\n return convertEntryKeysFromStorage({\n model,\n entry: item\n });\n });\n\n const hasMoreItems = items.length > limit;\n if (hasMoreItems) {\n /**\n * Remove the last item from results, we don't want to include it.\n */\n items.pop();\n }\n /**\n * Cursor is the `sort` value of the last item in the array.\n * https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#search-after\n */\n const cursor = items.length > 0 ? encodeCursor(hits[items.length - 1].sort) || null : null;\n return {\n hasMoreItems,\n totalCount: total.value,\n cursor,\n items\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: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\n model,\n entry: initialStorageEntry\n });\n\n /**\n * We need currently published entry to check if need to remove it.\n */\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n let latestEsEntry: ElasticsearchDbRecord | null = null;\n try {\n latestEsEntry = await getRecord<ElasticsearchDbRecord>({\n entity: esEntity,\n keys: latestKeys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read Elasticsearch latest or published data.\",\n ex.code || \"PUBLISH_BATCH_READ\",\n {\n error: ex,\n latestKeys: latestKeys,\n publishedKeys: publishedKeys\n }\n );\n }\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createRecordType()\n })\n ];\n const esItems = [];\n\n const { index } = configurations.es({\n model\n });\n\n if (publishedStorageEntry && publishedStorageEntry.id !== entry.id) {\n /**\n * If there is a `published` entry already, we need to set it to `unpublished`. We need to\n * execute two updates: update the previously published entry's status and the published entry record.\n * DynamoDB does not support `batchUpdate` - so here we load the previously published\n * entry's data to update its status within a batch operation. If, hopefully,\n * they introduce a true update batch operation, remove this `read` call.\n */\n const [previouslyPublishedEntry] = await dataLoaders.getRevisionById({\n model,\n ids: [publishedStorageEntry.id]\n });\n items.push(\n /**\n * Update currently published entry (unpublish it)\n */\n entity.putBatch({\n ...previouslyPublishedEntry,\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n savedOn: entry.savedOn,\n TYPE: createRecordType(),\n PK: createPartitionKey(publishedStorageEntry),\n SK: createRevisionSortKey(publishedStorageEntry)\n })\n );\n }\n /**\n * Update the helper item in DB with the new published entry\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...publishedKeys,\n TYPE: createPublishedRecordType()\n })\n );\n\n /**\n * We need the latest entry to check if it needs to be updated as well in the Elasticsearch.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n if (latestStorageEntry?.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...latestKeys\n })\n );\n }\n /**\n * If we are publishing the latest revision, let's also update the latest revision's status in ES.\n */\n if (latestEsEntry && latestStorageEntry?.id === entry.id) {\n /**\n * Need to decompress the data from Elasticsearch DynamoDB table.\n *\n * No need to transform it for the storage because it was fetched directly from the Elasticsearch table, where it sits transformed.\n */\n const latestEsEntryDataDecompressed: CmsEntry = (await decompress(\n plugins,\n latestEsEntry.data\n )) as any;\n\n esItems.push(\n esEntity.putBatch({\n index,\n PK: createPartitionKey(latestEsEntryDataDecompressed),\n SK: createLatestSortKey(),\n data: await getESLatestEntryData(plugins, {\n ...latestEsEntryDataDecompressed,\n status: CONTENT_ENTRY_STATUS.PUBLISHED,\n locked: true,\n savedOn: entry.savedOn,\n publishedOn: entry.publishedOn\n })\n })\n );\n }\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n /**\n * Update the published revision entry in ES.\n */\n const esPublishedData = await getESPublishedEntryData(plugins, preparedEntryData);\n\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index,\n data: esPublishedData\n })\n );\n\n /**\n * Finally, execute regular table batch.\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 store publish entry records in DynamoDB table.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store publish entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"PUBLISH_ES_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const unpublish = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsUnpublishParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\n model,\n entry: initialStorageEntry\n });\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\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: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createRecordType()\n })\n ];\n\n const esItems = [\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n ];\n /**\n * If we are unpublishing the latest revision, let's also update the latest revision entry's status in ES.\n */\n if (latestStorageEntry?.id === entry.id) {\n const { index } = configurations.es({\n model\n });\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n /**\n * Finally, execute regular table batch.\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 store unpublished entry records in DynamoDB table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store unpublished entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const getLatestRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const [entry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n const getPublishedRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const [entry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getRevisionById = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const [entry] = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getRevisions = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n const entries = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetByIdsParams\n ) => {\n const entries = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getLatestByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n const entries = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getPublishedByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n const entries = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getPreviousRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPreviousRevisionParams\n ) => {\n const { tenant, locale } = model;\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n 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: createRecordType()\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 entry = cleanupItem(entity, result);\n\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n entry,\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 return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n get,\n publish,\n unpublish,\n list,\n getLatestRevisionByEntryId,\n getPublishedRevisionByEntryId,\n getRevisionById,\n getRevisions,\n getByIds,\n getLatestByIds,\n getPublishedByIds,\n getPreviousRevision\n };\n};\n"],"mappings":"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"}
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createRevisionSortKey = exports.createPublishedSortKey = exports.createPartitionKey = exports.createLatestSortKey = void 0;
7
-
8
7
  var _utils = require("@webiny/utils");
9
-
10
8
  const createPartitionKey = params => {
11
9
  const {
12
10
  tenant,
@@ -18,23 +16,16 @@ const createPartitionKey = params => {
18
16
  } = (0, _utils.parseIdentifier)(initialId);
19
17
  return `T#${tenant}#L#${locale}#CMS#CME#${id}`;
20
18
  };
21
-
22
19
  exports.createPartitionKey = createPartitionKey;
23
-
24
20
  const createRevisionSortKey = params => {
25
21
  return `REV#${(0, _utils.zeroPad)(params.version)}`;
26
22
  };
27
-
28
23
  exports.createRevisionSortKey = createRevisionSortKey;
29
-
30
24
  const createLatestSortKey = () => {
31
25
  return "L";
32
26
  };
33
-
34
27
  exports.createLatestSortKey = createLatestSortKey;
35
-
36
28
  const createPublishedSortKey = () => {
37
29
  return "P";
38
30
  };
39
-
40
31
  exports.createPublishedSortKey = createPublishedSortKey;
@@ -1 +1 @@
1
- {"version":3,"names":["createPartitionKey","params","tenant","locale","id","initialId","parseIdentifier","createRevisionSortKey","zeroPad","version","createLatestSortKey","createPublishedSortKey"],"sources":["keys.ts"],"sourcesContent":["import { parseIdentifier, zeroPad } from \"@webiny/utils\";\n\nexport interface PartitionKeyParams {\n id: string;\n tenant: string;\n locale: string;\n}\nexport const createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale, id: initialId } = params;\n const { id } = parseIdentifier(initialId);\n return `T#${tenant}#L#${locale}#CMS#CME#${id}`;\n};\n\nexport interface SortKeyParams {\n version: number;\n}\nexport const createRevisionSortKey = (params: SortKeyParams): string => {\n return `REV#${zeroPad(params.version)}`;\n};\n\nexport const createLatestSortKey = (): string => {\n return \"L\";\n};\n\nexport const createPublishedSortKey = (): string => {\n return \"P\";\n};\n"],"mappings":";;;;;;;AAAA;;AAOO,MAAMA,kBAAkB,GAAIC,MAAD,IAAwC;EACtE,MAAM;IAAEC,MAAF;IAAUC,MAAV;IAAkBC,EAAE,EAAEC;EAAtB,IAAoCJ,MAA1C;EACA,MAAM;IAAEG;EAAF,IAAS,IAAAE,sBAAA,EAAgBD,SAAhB,CAAf;EACA,OAAQ,KAAIH,MAAO,MAAKC,MAAO,YAAWC,EAAG,EAA7C;AACH,CAJM;;;;AASA,MAAMG,qBAAqB,GAAIN,MAAD,IAAmC;EACpE,OAAQ,OAAM,IAAAO,cAAA,EAAQP,MAAM,CAACQ,OAAf,CAAwB,EAAtC;AACH,CAFM;;;;AAIA,MAAMC,mBAAmB,GAAG,MAAc;EAC7C,OAAO,GAAP;AACH,CAFM;;;;AAIA,MAAMC,sBAAsB,GAAG,MAAc;EAChD,OAAO,GAAP;AACH,CAFM"}
1
+ {"version":3,"names":["createPartitionKey","params","tenant","locale","id","initialId","parseIdentifier","createRevisionSortKey","zeroPad","version","createLatestSortKey","createPublishedSortKey"],"sources":["keys.ts"],"sourcesContent":["import { parseIdentifier, zeroPad } from \"@webiny/utils\";\n\nexport interface PartitionKeyParams {\n id: string;\n tenant: string;\n locale: string;\n}\nexport const createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale, id: initialId } = params;\n const { id } = parseIdentifier(initialId);\n return `T#${tenant}#L#${locale}#CMS#CME#${id}`;\n};\n\nexport interface SortKeyParams {\n version: number;\n}\nexport const createRevisionSortKey = (params: SortKeyParams): string => {\n return `REV#${zeroPad(params.version)}`;\n};\n\nexport const createLatestSortKey = (): string => {\n return \"L\";\n};\n\nexport const createPublishedSortKey = (): string => {\n return \"P\";\n};\n"],"mappings":";;;;;;AAAA;AAOO,MAAMA,kBAAkB,GAAIC,MAA0B,IAAa;EACtE,MAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC,EAAE,EAAEC;EAAU,CAAC,GAAGJ,MAAM;EAChD,MAAM;IAAEG;EAAG,CAAC,GAAG,IAAAE,sBAAe,EAACD,SAAS,CAAC;EACzC,OAAQ,KAAIH,MAAO,MAAKC,MAAO,YAAWC,EAAG,EAAC;AAClD,CAAC;AAAC;AAKK,MAAMG,qBAAqB,GAAIN,MAAqB,IAAa;EACpE,OAAQ,OAAM,IAAAO,cAAO,EAACP,MAAM,CAACQ,OAAO,CAAE,EAAC;AAC3C,CAAC;AAAC;AAEK,MAAMC,mBAAmB,GAAG,MAAc;EAC7C,OAAO,GAAG;AACd,CAAC;AAAC;AAEK,MAAMC,sBAAsB,GAAG,MAAc;EAChD,OAAO,GAAG;AACd,CAAC;AAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const createRecordType: () => string;
2
+ export declare const createLatestRecordType: () => string;
3
+ export declare const createPublishedRecordType: () => string;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createRecordType = exports.createPublishedRecordType = exports.createLatestRecordType = void 0;
7
+ const createRecordType = () => {
8
+ return "cms.entry";
9
+ };
10
+ exports.createRecordType = createRecordType;
11
+ const createLatestRecordType = () => {
12
+ return `${createRecordType()}.l`;
13
+ };
14
+ exports.createLatestRecordType = createLatestRecordType;
15
+ const createPublishedRecordType = () => {
16
+ return `${createRecordType()}.p`;
17
+ };
18
+ exports.createPublishedRecordType = createPublishedRecordType;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createRecordType","createLatestRecordType","createPublishedRecordType"],"sources":["recordType.ts"],"sourcesContent":["export const createRecordType = (): string => {\n return \"cms.entry\";\n};\nexport const createLatestRecordType = (): string => {\n return `${createRecordType()}.l`;\n};\nexport const createPublishedRecordType = (): string => {\n return `${createRecordType()}.p`;\n};\n"],"mappings":";;;;;;AAAO,MAAMA,gBAAgB,GAAG,MAAc;EAC1C,OAAO,WAAW;AACtB,CAAC;AAAC;AACK,MAAMC,sBAAsB,GAAG,MAAc;EAChD,OAAQ,GAAED,gBAAgB,EAAG,IAAG;AACpC,CAAC;AAAC;AACK,MAAME,yBAAyB,GAAG,MAAc;EACnD,OAAQ,GAAEF,gBAAgB,EAAG,IAAG;AACpC,CAAC;AAAC"}
@@ -1,28 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.createGroupsStorageOperations = void 0;
9
-
10
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
9
  var _error = _interopRequireDefault(require("@webiny/error"));
13
-
14
10
  var _get = require("@webiny/db-dynamodb/utils/get");
15
-
16
11
  var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
17
-
18
12
  var _query = require("@webiny/db-dynamodb/utils/query");
19
-
20
13
  var _filter = require("@webiny/db-dynamodb/utils/filter");
21
-
22
14
  var _ValueFilterPlugin = require("@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin");
23
-
24
15
  var _sort = require("@webiny/db-dynamodb/utils/sort");
25
-
26
16
  const createPartitionKey = params => {
27
17
  const {
28
18
  tenant,
@@ -30,42 +20,35 @@ const createPartitionKey = params => {
30
20
  } = params;
31
21
  return `T#${tenant}#L#${locale}#CMS#CMG`;
32
22
  };
33
-
34
23
  const createSortKeys = params => {
35
24
  const {
36
25
  id
37
26
  } = params;
38
27
  return id;
39
28
  };
40
-
41
29
  const createKeys = params => {
42
30
  return {
43
31
  PK: createPartitionKey(params),
44
32
  SK: createSortKeys(params)
45
33
  };
46
34
  };
47
-
48
35
  const createType = () => {
49
36
  return "cms.group";
50
37
  };
51
-
52
38
  const createGroupsStorageOperations = params => {
53
39
  const {
54
40
  entity,
55
41
  plugins
56
42
  } = params;
57
43
  const filteringPlugins = plugins.byType(_ValueFilterPlugin.ValueFilterPlugin.type);
58
-
59
44
  if (filteringPlugins.length === 0) {
60
45
  throw new _error.default("DynamoDB filtering plugins not loaded.", "MISSING_DYNAMODB_FILTERING_PLUGINS");
61
46
  }
62
-
63
47
  const create = async params => {
64
48
  const {
65
49
  group
66
50
  } = params;
67
51
  const keys = createKeys(group);
68
-
69
52
  try {
70
53
  await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, group), {}, {
71
54
  TYPE: createType()
@@ -79,13 +62,11 @@ const createGroupsStorageOperations = params => {
79
62
  });
80
63
  }
81
64
  };
82
-
83
65
  const update = async params => {
84
66
  const {
85
67
  group
86
68
  } = params;
87
69
  const keys = createKeys(group);
88
-
89
70
  try {
90
71
  await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, group), {}, {
91
72
  TYPE: createType()
@@ -99,14 +80,12 @@ const createGroupsStorageOperations = params => {
99
80
  });
100
81
  }
101
82
  };
102
-
103
83
  const deleteGroup = async params => {
104
84
  const {
105
85
  group
106
- } = params; // TODO make sure that group has locale and tenant on it - add it in the crud just in case
107
-
86
+ } = params;
87
+ // TODO make sure that group has locale and tenant on it - add it in the crud just in case
108
88
  const keys = createKeys(group);
109
-
110
89
  try {
111
90
  await entity.delete(keys);
112
91
  return group;
@@ -118,10 +97,8 @@ const createGroupsStorageOperations = params => {
118
97
  });
119
98
  }
120
99
  };
121
-
122
100
  const get = async params => {
123
101
  const keys = createKeys(params);
124
-
125
102
  try {
126
103
  const group = await (0, _get.get)({
127
104
  entity,
@@ -136,7 +113,6 @@ const createGroupsStorageOperations = params => {
136
113
  }));
137
114
  }
138
115
  };
139
-
140
116
  const list = async params => {
141
117
  const {
142
118
  sort,
@@ -150,7 +126,6 @@ const createGroupsStorageOperations = params => {
150
126
  }
151
127
  };
152
128
  let records = [];
153
-
154
129
  try {
155
130
  records = await (0, _query.queryAll)(queryAllParams);
156
131
  } catch (ex) {
@@ -161,7 +136,6 @@ const createGroupsStorageOperations = params => {
161
136
  where: initialWhere
162
137
  }));
163
138
  }
164
-
165
139
  const where = (0, _objectSpread2.default)({}, initialWhere);
166
140
  delete where["tenant"];
167
141
  delete where["locale"];
@@ -171,18 +145,15 @@ const createGroupsStorageOperations = params => {
171
145
  fields: [],
172
146
  plugins
173
147
  });
174
-
175
148
  if (!sort || sort.length === 0 || filteredItems.length === 0) {
176
149
  return filteredItems;
177
150
  }
178
-
179
151
  return (0, _sort.sortItems)({
180
152
  items: filteredItems,
181
153
  sort,
182
154
  fields: []
183
155
  });
184
156
  };
185
-
186
157
  return {
187
158
  create,
188
159
  update,
@@ -191,5 +162,4 @@ const createGroupsStorageOperations = params => {
191
162
  list
192
163
  };
193
164
  };
194
-
195
165
  exports.createGroupsStorageOperations = createGroupsStorageOperations;