@webiny/api-headless-cms-ddb-es 5.25.0 → 5.26.0-beta.0
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/configurations.d.ts +2 -2
- package/configurations.js +18 -7
- package/configurations.js.map +1 -1
- package/elasticsearch/createElasticsearchIndex.d.ts +9 -0
- package/elasticsearch/createElasticsearchIndex.js +60 -0
- package/elasticsearch/createElasticsearchIndex.js.map +1 -0
- package/elasticsearch/deleteElasticsearchIndex.d.ts +8 -0
- package/elasticsearch/deleteElasticsearchIndex.js +43 -0
- package/elasticsearch/deleteElasticsearchIndex.js.map +1 -0
- package/elasticsearch/indexing/dateTimeIndexing.js +1 -1
- package/elasticsearch/indexing/dateTimeIndexing.js.map +1 -1
- package/elasticsearch/indices/base.d.ts +2 -0
- package/elasticsearch/indices/base.js +23 -0
- package/elasticsearch/indices/base.js.map +1 -0
- package/elasticsearch/indices/index.d.ts +1 -0
- package/elasticsearch/indices/index.js +16 -0
- package/elasticsearch/indices/index.js.map +1 -0
- package/elasticsearch/indices/japanese.d.ts +2 -0
- package/elasticsearch/indices/japanese.js +24 -0
- package/elasticsearch/indices/japanese.js.map +1 -0
- package/helpers/createElasticsearchQueryBody.js +83 -28
- package/helpers/createElasticsearchQueryBody.js.map +1 -1
- package/index.js +49 -14
- package/index.js.map +1 -1
- package/operations/entry/index.js +37 -47
- package/operations/entry/index.js.map +1 -1
- package/operations/group/index.js +1 -3
- package/operations/group/index.js.map +1 -1
- package/operations/model/index.js +18 -36
- package/operations/model/index.js.map +1 -1
- package/operations/settings/index.js +1 -3
- package/operations/settings/index.js.map +1 -1
- package/operations/system/index.js +1 -3
- package/operations/system/index.js.map +1 -1
- package/package.json +15 -17
- package/plugins/CmsEntryElasticsearchIndexPlugin.d.ts +4 -0
- package/plugins/CmsEntryElasticsearchIndexPlugin.js +17 -0
- package/plugins/CmsEntryElasticsearchIndexPlugin.js.map +1 -0
- package/types.d.ts +2 -2
- package/types.js.map +1 -1
- package/upgrades/index.d.ts +1 -1
- package/upgrades/index.js +1 -7
- package/upgrades/index.js.map +1 -1
- package/helpers/operatorPluginsList.d.ts +0 -6
- package/helpers/operatorPluginsList.js +0 -30
- package/helpers/operatorPluginsList.js.map +0 -1
- package/operations/system/createElasticsearchTemplate.d.ts +0 -5
- package/operations/system/createElasticsearchTemplate.js +0 -62
- package/operations/system/createElasticsearchTemplate.js.map +0 -1
- package/upgrades/utils.d.ts +0 -4
- package/upgrades/utils.js +0 -20
- package/upgrades/utils.js.map +0 -1
- package/upgrades/v5.0.0/cleanDatabaseRecord.d.ts +0 -9
- package/upgrades/v5.0.0/cleanDatabaseRecord.js +0 -20
- package/upgrades/v5.0.0/cleanDatabaseRecord.js.map +0 -1
- package/upgrades/v5.0.0/createOldVersionIndiceName.d.ts +0 -2
- package/upgrades/v5.0.0/createOldVersionIndiceName.js +0 -12
- package/upgrades/v5.0.0/createOldVersionIndiceName.js.map +0 -1
- package/upgrades/v5.0.0/entryValueFixer.d.ts +0 -7
- package/upgrades/v5.0.0/entryValueFixer.js +0 -124
- package/upgrades/v5.0.0/entryValueFixer.js.map +0 -1
- package/upgrades/v5.0.0/fieldFinder.d.ts +0 -9
- package/upgrades/v5.0.0/fieldFinder.js +0 -46
- package/upgrades/v5.0.0/fieldFinder.js.map +0 -1
- package/upgrades/v5.0.0/helpers.d.ts +0 -4
- package/upgrades/v5.0.0/helpers.js +0 -57
- package/upgrades/v5.0.0/helpers.js.map +0 -1
- package/upgrades/v5.0.0/index.d.ts +0 -4
- package/upgrades/v5.0.0/index.js +0 -232
- package/upgrades/v5.0.0/index.js.map +0 -1
- package/upgrades/v5.8.0/index.d.ts +0 -7
- package/upgrades/v5.8.0/index.js +0 -426
- package/upgrades/v5.8.0/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["createType","createLatestType","createPublishedType","getEntryData","entry","TYPE","__type","getESLatestEntryData","plugins","latest","getESPublishedEntryData","published","createEntriesStorageOperations","params","entity","esEntity","elasticsearch","dataLoaders","DataLoadersHandler","create","model","storageEntry","esEntry","index","esIndex","configurations","es","esLatestData","revisionKeys","PK","SK","latestKeys","items","putBatch","table","clearAll","ex","WebinyError","message","code","error","put","data","createRevisionFrom","originalEntry","update","latestStorageEntry","getLatestRevisionByEntryId","ids","id","elasticsearchLatestData","push","deleteEntry","partitionKey","options","gte","esItems","deleteItems","map","item","deleteBatch","deleteEsItems","deleteRevision","entryToDelete","entryToSetAsLatest","storageEntryToSetAsLatest","publishedStorageEntry","getPublishedRevisionByEntryId","length","list","limit","result","indices","exists","body","hasMoreItems","totalCount","cursor","args","parentPath","response","search","hits","total","entries","_source","pop","sort","value","get","shift","publish","publishedKeys","latestEsEntry","keys","previouslyPublishedEntry","getRevisionById","status","CONTENT_ENTRY_STATUS","UNPUBLISHED","savedOn","latestEsEntryDataDecompressed","PUBLISHED","locked","publishedOn","preparedEntryData","unpublish","requestReview","requestChanges","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","tenant","locale","entryId","version","queryParams","lt","filters","attr","eq","reverse","delete"],"mappings":"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","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 CmsEntryStorageOperationsRequestChangesParams,\n CmsEntryStorageOperationsRequestReviewParams,\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryStorageOperationsUpdateParams,\n CmsModel,\n CONTENT_ENTRY_STATUS\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 { compress, decompress } from \"@webiny/api-elasticsearch/compression\";\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 } from \"@webiny/api-elasticsearch/limit\";\nimport { encodeCursor } from \"@webiny/api-elasticsearch/cursors\";\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\";\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 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 (model: CmsModel, params: CmsEntryStorageOperationsCreateParams) => {\n const { entry, storageEntry } = params;\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const { index: esIndex } = configurations.es({\n model\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n }),\n entity.putBatch({\n ...storageEntry,\n ...latestKeys,\n TYPE: createLatestType()\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 try {\n await esEntity.put({\n ...latestKeys,\n index: esIndex,\n data: esLatestData\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 storageEntry;\n };\n\n const createRevisionFrom = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { originalEntry, entry, storageEntry } = params;\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\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 originalEntry,\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 originalEntry,\n entry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return storageEntry;\n };\n\n const update = async (model: CmsModel, params: CmsEntryStorageOperationsUpdateParams) => {\n const { originalEntry, entry, storageEntry } = params;\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\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: [originalEntry.id]\n });\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n /**\n * If the latest entry is the one being updated, we need to create a new latest entry records.\n */\n let elasticsearchLatestData = null;\n if (latestStorageEntry.id === originalEntry.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 const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n elasticsearchLatestData = await getESLatestEntryData(plugins, esEntry);\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 originalEntry,\n entry,\n storageEntry\n }\n );\n }\n if (!elasticsearchLatestData) {\n return storageEntry;\n }\n const { index: esIndex } = configurations.es({\n model\n });\n try {\n await esEntity.put({\n ...latestKeys,\n index: esIndex,\n data: elasticsearchLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry DynamoDB Elasticsearch record.\",\n ex.code || \"UPDATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n originalEntry,\n entry\n }\n );\n }\n return storageEntry;\n };\n\n const deleteEntry = async (model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) => {\n const { entry } = params;\n\n const partitionKey = createPartitionKey(entry);\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: CmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entryToDelete, entryToSetAsLatest, storageEntryToSetAsLatest } = params;\n\n const partitionKey = createPartitionKey(entryToDelete);\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: [entryToDelete.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(entryToDelete)\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 && entryToDelete.id === publishedStorageEntry.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 (entryToSetAsLatest && storageEntryToSetAsLatest) {\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entryToSetAsLatest),\n storageEntry: lodashCloneDeep(storageEntryToSetAsLatest)\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 ...storageEntryToSetAsLatest,\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 entryToDelete,\n entryToSetAsLatest,\n storageEntryToSetAsLatest\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 entryToDelete,\n entryToSetAsLatest,\n storageEntryToSetAsLatest\n }\n );\n }\n };\n\n const list = async (model: CmsModel, params: CmsEntryStorageOperationsListParams) => {\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 });\n }\n\n const { hits, total } = response.body.hits;\n const items = extractEntriesFromIndex({\n plugins,\n model,\n entries: hits.map(item => item._source)\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 (model: CmsModel, params: CmsEntryStorageOperationsGetParams) => {\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish = async (model: CmsModel, params: CmsEntryStorageOperationsPublishParams) => {\n const { entry, storageEntry } = params;\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(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\n };\n const publishedKeys = {\n PK: createPartitionKey(entry),\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 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 && 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 && latestStorageEntry.id === entry.id) {\n /**\n * Need to decompress the data from Elasticsearch DynamoDB table.\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 storageEntry;\n };\n\n const unpublish = async (model: CmsModel, params: CmsEntryStorageOperationsUnpublishParams) => {\n const { entry, storageEntry } = params;\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(entry);\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 storageEntry;\n };\n\n const requestReview = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestReviewParams\n ) => {\n const { entry, storageEntry, originalEntry } = params;\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(entry);\n\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n let esLatestData = null;\n const { index } = configurations.es({\n model\n });\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\n }\n\n try {\n await entity.put({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not store request review entry record into DynamoDB table.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n /**\n * No need to proceed further if nothing to put into Elasticsearch.\n */\n if (!esLatestData) {\n return storageEntry;\n }\n\n try {\n await esEntity.put({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store request review entry record into DynamoDB Elasticsearch table.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n return storageEntry;\n };\n\n const requestChanges = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestChangesParams\n ) => {\n const { entry, storageEntry, originalEntry } = params;\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(entry);\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n })\n ];\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n const { index } = configurations.es({\n model\n });\n let esLatestData = null;\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType()\n })\n );\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\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 store request changes entry record into DynamoDB table.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n /**\n * No need to proceed further if nothing to put into Elasticsearch.\n */\n if (!esLatestData) {\n return storageEntry;\n }\n\n try {\n await esEntity.put({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store request changes entry record into DynamoDB Elasticsearch table.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n return storageEntry;\n };\n\n const getLatestRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n const getPublishedRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisionById = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const result = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisions = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n return await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n };\n\n const getByIds = async (model: CmsModel, params: CmsEntryStorageOperationsGetByIdsParams) => {\n return dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n };\n\n const getLatestByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n return dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPublishedByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n return dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPreviousRevision = async (\n model: CmsModel,\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 return cleanupItem(entity, result);\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 requestReview,\n requestChanges,\n list,\n getLatestRevisionByEntryId,\n getPublishedRevisionByEntryId,\n getRevisionById,\n getRevisions,\n getByIds,\n getLatestByIds,\n getPublishedByIds,\n getPreviousRevision\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["createType","createLatestType","createPublishedType","getEntryData","entry","TYPE","__type","getESLatestEntryData","plugins","latest","getESPublishedEntryData","published","createEntriesStorageOperations","params","entity","esEntity","elasticsearch","dataLoaders","DataLoadersHandler","create","model","storageEntry","esEntry","index","esIndex","configurations","es","esLatestData","revisionKeys","PK","SK","latestKeys","items","putBatch","table","clearAll","ex","WebinyError","message","code","error","put","data","createRevisionFrom","update","latestStorageEntry","getLatestRevisionByEntryId","ids","id","elasticsearchLatestData","push","deleteEntry","partitionKey","options","gte","esItems","deleteItems","map","item","deleteBatch","deleteEsItems","deleteRevision","latestEntry","publishedStorageEntry","getPublishedRevisionByEntryId","length","list","limit","result","indices","exists","body","hasMoreItems","totalCount","cursor","args","parentPath","response","search","hits","total","entries","_source","pop","sort","value","get","shift","publish","publishedKeys","latestEsEntry","keys","previouslyPublishedEntry","getRevisionById","status","CONTENT_ENTRY_STATUS","UNPUBLISHED","savedOn","latestEsEntryDataDecompressed","PUBLISHED","locked","publishedOn","preparedEntryData","unpublish","requestReview","requestChanges","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","tenant","locale","entryId","version","queryParams","lt","filters","attr","eq","reverse","delete"],"mappings":"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","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 CmsEntryStorageOperationsRequestChangesParams,\n CmsEntryStorageOperationsRequestReviewParams,\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryStorageOperationsUpdateParams,\n CmsModel,\n CONTENT_ENTRY_STATUS\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 { compress, decompress } from \"@webiny/api-elasticsearch/compression\";\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 } from \"@webiny/api-elasticsearch/limit\";\nimport { encodeCursor } from \"@webiny/api-elasticsearch/cursors\";\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\";\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 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 (model: CmsModel, params: CmsEntryStorageOperationsCreateParams) => {\n const { entry, storageEntry } = params;\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const { index: esIndex } = configurations.es({\n model\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n }),\n entity.putBatch({\n ...storageEntry,\n ...latestKeys,\n TYPE: createLatestType()\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 try {\n await esEntity.put({\n ...latestKeys,\n index: esIndex,\n data: esLatestData\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 storageEntry;\n };\n\n const createRevisionFrom = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { entry, storageEntry } = params;\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\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 storageEntry;\n };\n\n const update = async (model: CmsModel, params: CmsEntryStorageOperationsUpdateParams) => {\n const { entry, storageEntry } = params;\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\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 items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n /**\n * If the latest entry is the one being updated, we need to create a new latest entry records.\n */\n let elasticsearchLatestData = 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 const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n elasticsearchLatestData = await getESLatestEntryData(plugins, esEntry);\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 (!elasticsearchLatestData) {\n return storageEntry;\n }\n const { index: esIndex } = configurations.es({\n model\n });\n try {\n await esEntity.put({\n ...latestKeys,\n index: esIndex,\n data: elasticsearchLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry DynamoDB Elasticsearch record.\",\n ex.code || \"UPDATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n return storageEntry;\n };\n\n const deleteEntry = async (model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) => {\n const { entry } = params;\n\n const partitionKey = createPartitionKey(entry);\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: CmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n\n const partitionKey = createPartitionKey(entry);\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 && entry.id === publishedStorageEntry.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 (model: CmsModel, params: CmsEntryStorageOperationsListParams) => {\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 });\n }\n\n const { hits, total } = response.body.hits;\n const items = extractEntriesFromIndex({\n plugins,\n model,\n entries: hits.map(item => item._source)\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 (model: CmsModel, params: CmsEntryStorageOperationsGetParams) => {\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish = async (model: CmsModel, params: CmsEntryStorageOperationsPublishParams) => {\n const { entry, storageEntry } = params;\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(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\n };\n const publishedKeys = {\n PK: createPartitionKey(entry),\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 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 && 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 && latestStorageEntry.id === entry.id) {\n /**\n * Need to decompress the data from Elasticsearch DynamoDB table.\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 storageEntry;\n };\n\n const unpublish = async (model: CmsModel, params: CmsEntryStorageOperationsUnpublishParams) => {\n const { entry, storageEntry } = params;\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(entry);\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 storageEntry;\n };\n\n const requestReview = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestReviewParams\n ) => {\n const { entry, storageEntry } = params;\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(entry);\n\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n let esLatestData = null;\n const { index } = configurations.es({\n model\n });\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\n }\n\n try {\n await entity.put({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not store request review entry record into DynamoDB table.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n storageEntry,\n latestStorageEntry\n }\n );\n }\n /**\n * No need to proceed further if nothing to put into Elasticsearch.\n */\n if (!esLatestData) {\n return storageEntry;\n }\n\n try {\n await esEntity.put({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store request review entry record into DynamoDB Elasticsearch table.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n storageEntry,\n latestStorageEntry\n }\n );\n }\n return storageEntry;\n };\n\n const requestChanges = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestChangesParams\n ) => {\n const { entry, storageEntry } = params;\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(entry);\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n })\n ];\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n const { index } = configurations.es({\n model\n });\n let esLatestData = null;\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType()\n })\n );\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\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 store request changes entry record into DynamoDB table.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n latestStorageEntry\n }\n );\n }\n /**\n * No need to proceed further if nothing to put into Elasticsearch.\n */\n if (!esLatestData) {\n return storageEntry;\n }\n\n try {\n await esEntity.put({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store request changes entry record into DynamoDB Elasticsearch table.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n latestStorageEntry\n }\n );\n }\n return storageEntry;\n };\n\n const getLatestRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n const getPublishedRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisionById = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const result = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisions = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n return await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n };\n\n const getByIds = async (model: CmsModel, params: CmsEntryStorageOperationsGetByIdsParams) => {\n return dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n };\n\n const getLatestByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n return dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPublishedByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n return dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPreviousRevision = async (\n model: CmsModel,\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 return cleanupItem(entity, result);\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 requestReview,\n requestChanges,\n list,\n getLatestRevisionByEntryId,\n getPublishedRevisionByEntryId,\n getRevisionById,\n getRevisions,\n getByIds,\n getLatestByIds,\n getPublishedByIds,\n getPreviousRevision\n };\n};\n"]}
|
|
@@ -86,8 +86,7 @@ const createGroupsStorageOperations = params => {
|
|
|
86
86
|
|
|
87
87
|
const update = async params => {
|
|
88
88
|
const {
|
|
89
|
-
group
|
|
90
|
-
original
|
|
89
|
+
group
|
|
91
90
|
} = params;
|
|
92
91
|
const keys = createKeys(group);
|
|
93
92
|
|
|
@@ -100,7 +99,6 @@ const createGroupsStorageOperations = params => {
|
|
|
100
99
|
throw new _error.default(ex.message || "Could not update group.", ex.code || "UPDATE_GROUP_ERROR", {
|
|
101
100
|
error: ex,
|
|
102
101
|
group,
|
|
103
|
-
original,
|
|
104
102
|
keys
|
|
105
103
|
});
|
|
106
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["createPartitionKey","params","tenant","locale","createSortKeys","id","createKeys","PK","SK","createType","createGroupsStorageOperations","entity","plugins","filteringPlugins","byType","ValueFilterPlugin","type","length","WebinyError","create","group","keys","put","TYPE","ex","message","code","error","update","original","deleteGroup","delete","get","list","sort","where","initialWhere","queryAllParams","partitionKey","options","gte","records","filteredItems","items","fields"],"mappings":"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","sourcesContent":["import {\n CmsGroup,\n CmsGroupStorageOperations,\n CmsGroupStorageOperationsCreateParams,\n CmsGroupStorageOperationsDeleteParams,\n CmsGroupStorageOperationsGetParams,\n CmsGroupStorageOperationsListParams,\n CmsGroupStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\n\ninterface PartitionKeyParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CMG`;\n};\n\ninterface SortKeyParams {\n id: string;\n}\nconst createSortKeys = (params: SortKeyParams): string => {\n const { id } = params;\n return id;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeyParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKeys(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.group\";\n};\n\nexport interface CreateGroupsStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createGroupsStorageOperations = (\n params: CreateGroupsStorageOperationsParams\n): CmsGroupStorageOperations => {\n const { entity, plugins } = params;\n\n const filteringPlugins = plugins.byType<ValueFilterPlugin>(ValueFilterPlugin.type);\n if (filteringPlugins.length === 0) {\n throw new WebinyError(\n \"DynamoDB filtering plugins not loaded.\",\n \"MISSING_DYNAMODB_FILTERING_PLUGINS\"\n );\n }\n\n const create = async (params: CmsGroupStorageOperationsCreateParams) => {\n const { group } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create group.\",\n ex.code || \"CREATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const update = async (params: CmsGroupStorageOperationsUpdateParams) => {\n const { group, original } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update group.\",\n ex.code || \"UPDATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n original,\n keys\n }\n );\n }\n };\n const deleteGroup = async (params: CmsGroupStorageOperationsDeleteParams) => {\n const { group } = params;\n // TODO make sure that group has locale and tenant on it - add it in the crud just in case\n const keys = createKeys(group);\n\n try {\n await entity.delete(keys);\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete group.\",\n ex.code || \"DELETE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const get = async (params: CmsGroupStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const group = await getRecord<CmsGroup>({\n entity,\n keys\n });\n\n return cleanupItem(entity, group);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get group.\",\n ex.code || \"GET_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n keys\n }\n );\n }\n };\n const list = async (params: CmsGroupStorageOperationsListParams) => {\n const { sort, where: initialWhere } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(initialWhere),\n options: {\n gte: \" \"\n }\n };\n\n let records: CmsGroup[] = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list groups.\",\n ex.code || \"LIST_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n sort,\n where: initialWhere\n }\n );\n }\n\n const where: Partial<CmsGroupStorageOperationsListParams[\"where\"]> = {\n ...initialWhere\n };\n delete where[\"tenant\"];\n delete where[\"locale\"];\n\n const filteredItems = filterItems({\n items: records,\n where,\n fields: [],\n plugins\n });\n\n if (!sort || sort.length === 0 || filteredItems.length === 0) {\n return filteredItems;\n }\n return sortItems({\n items: filteredItems,\n sort,\n fields: []\n });\n };\n\n return {\n create,\n update,\n delete: deleteGroup,\n get,\n list\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["createPartitionKey","params","tenant","locale","createSortKeys","id","createKeys","PK","SK","createType","createGroupsStorageOperations","entity","plugins","filteringPlugins","byType","ValueFilterPlugin","type","length","WebinyError","create","group","keys","put","TYPE","ex","message","code","error","update","deleteGroup","delete","get","list","sort","where","initialWhere","queryAllParams","partitionKey","options","gte","records","filteredItems","items","fields"],"mappings":"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","sourcesContent":["import {\n CmsGroup,\n CmsGroupStorageOperations,\n CmsGroupStorageOperationsCreateParams,\n CmsGroupStorageOperationsDeleteParams,\n CmsGroupStorageOperationsGetParams,\n CmsGroupStorageOperationsListParams,\n CmsGroupStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\n\ninterface PartitionKeyParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CMG`;\n};\n\ninterface SortKeyParams {\n id: string;\n}\nconst createSortKeys = (params: SortKeyParams): string => {\n const { id } = params;\n return id;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeyParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKeys(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.group\";\n};\n\nexport interface CreateGroupsStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createGroupsStorageOperations = (\n params: CreateGroupsStorageOperationsParams\n): CmsGroupStorageOperations => {\n const { entity, plugins } = params;\n\n const filteringPlugins = plugins.byType<ValueFilterPlugin>(ValueFilterPlugin.type);\n if (filteringPlugins.length === 0) {\n throw new WebinyError(\n \"DynamoDB filtering plugins not loaded.\",\n \"MISSING_DYNAMODB_FILTERING_PLUGINS\"\n );\n }\n\n const create = async (params: CmsGroupStorageOperationsCreateParams) => {\n const { group } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create group.\",\n ex.code || \"CREATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const update = async (params: CmsGroupStorageOperationsUpdateParams) => {\n const { group } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update group.\",\n ex.code || \"UPDATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const deleteGroup = async (params: CmsGroupStorageOperationsDeleteParams) => {\n const { group } = params;\n // TODO make sure that group has locale and tenant on it - add it in the crud just in case\n const keys = createKeys(group);\n\n try {\n await entity.delete(keys);\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete group.\",\n ex.code || \"DELETE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const get = async (params: CmsGroupStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const group = await getRecord<CmsGroup>({\n entity,\n keys\n });\n\n return cleanupItem(entity, group);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get group.\",\n ex.code || \"GET_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n keys\n }\n );\n }\n };\n const list = async (params: CmsGroupStorageOperationsListParams) => {\n const { sort, where: initialWhere } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(initialWhere),\n options: {\n gte: \" \"\n }\n };\n\n let records: CmsGroup[] = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list groups.\",\n ex.code || \"LIST_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n sort,\n where: initialWhere\n }\n );\n }\n\n const where: Partial<CmsGroupStorageOperationsListParams[\"where\"]> = {\n ...initialWhere\n };\n delete where[\"tenant\"];\n delete where[\"locale\"];\n\n const filteredItems = filterItems({\n items: records,\n where,\n fields: [],\n plugins\n });\n\n if (!sort || sort.length === 0 || filteredItems.length === 0) {\n return filteredItems;\n }\n return sortItems({\n items: filteredItems,\n sort,\n fields: []\n });\n };\n\n return {\n create,\n update,\n delete: deleteGroup,\n get,\n list\n };\n};\n"]}
|
|
@@ -9,7 +9,7 @@ exports.createModelsStorageOperations = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
12
|
-
var _configurations =
|
|
12
|
+
var _configurations = require("../../configurations");
|
|
13
13
|
|
|
14
14
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
15
15
|
|
|
@@ -59,30 +59,10 @@ const createModelsStorageOperations = params => {
|
|
|
59
59
|
|
|
60
60
|
const {
|
|
61
61
|
index
|
|
62
|
-
} = _configurations.
|
|
62
|
+
} = _configurations.configurations.es({
|
|
63
63
|
model
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
-
try {
|
|
67
|
-
const {
|
|
68
|
-
body: exists
|
|
69
|
-
} = await elasticsearch.indices.exists({
|
|
70
|
-
index
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
if (!exists) {
|
|
74
|
-
await elasticsearch.indices.create({
|
|
75
|
-
index
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
} catch (ex) {
|
|
79
|
-
throw new _error.default("Could not create Elasticsearch indice.", "ELASTICSEARCH_INDICE_CREATE_ERROR", {
|
|
80
|
-
error: ex,
|
|
81
|
-
index,
|
|
82
|
-
model
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
66
|
const keys = createKeys(model);
|
|
87
67
|
let error;
|
|
88
68
|
|
|
@@ -101,10 +81,11 @@ const createModelsStorageOperations = params => {
|
|
|
101
81
|
|
|
102
82
|
try {
|
|
103
83
|
await elasticsearch.indices.delete({
|
|
104
|
-
index
|
|
84
|
+
index,
|
|
85
|
+
ignore_unavailable: true
|
|
105
86
|
});
|
|
106
87
|
} catch (ex) {
|
|
107
|
-
throw new _error.default(`Could not delete elasticsearch index "${index}" after model record failed to be created.`, "
|
|
88
|
+
throw new _error.default(`Could not delete elasticsearch index "${index}" after model record failed to be created.`, "DELETE_MODEL_INDEX_ERROR", {
|
|
108
89
|
dynamodbError: error,
|
|
109
90
|
elasticsearchError: ex
|
|
110
91
|
});
|
|
@@ -115,7 +96,6 @@ const createModelsStorageOperations = params => {
|
|
|
115
96
|
|
|
116
97
|
const update = async params => {
|
|
117
98
|
const {
|
|
118
|
-
original,
|
|
119
99
|
model
|
|
120
100
|
} = params;
|
|
121
101
|
const keys = createKeys(model);
|
|
@@ -129,7 +109,6 @@ const createModelsStorageOperations = params => {
|
|
|
129
109
|
throw new _error.default(ex.message || "Could not update model.", ex.code || "MODEL_UPDATE_ERROR", {
|
|
130
110
|
error: ex,
|
|
131
111
|
model,
|
|
132
|
-
original,
|
|
133
112
|
keys
|
|
134
113
|
});
|
|
135
114
|
}
|
|
@@ -141,6 +120,12 @@ const createModelsStorageOperations = params => {
|
|
|
141
120
|
} = params;
|
|
142
121
|
const keys = createKeys(model);
|
|
143
122
|
|
|
123
|
+
const {
|
|
124
|
+
index
|
|
125
|
+
} = _configurations.configurations.es({
|
|
126
|
+
model
|
|
127
|
+
});
|
|
128
|
+
|
|
144
129
|
try {
|
|
145
130
|
await entity.delete(keys);
|
|
146
131
|
} catch (ex) {
|
|
@@ -150,24 +135,21 @@ const createModelsStorageOperations = params => {
|
|
|
150
135
|
keys
|
|
151
136
|
});
|
|
152
137
|
}
|
|
153
|
-
|
|
154
|
-
const {
|
|
155
|
-
index
|
|
156
|
-
} = _configurations.default.es({
|
|
157
|
-
model
|
|
158
|
-
});
|
|
159
138
|
/**
|
|
160
|
-
*
|
|
139
|
+
* Always delete the model index after deleting the model.
|
|
161
140
|
*/
|
|
162
141
|
|
|
163
142
|
|
|
164
143
|
try {
|
|
165
144
|
await elasticsearch.indices.delete({
|
|
166
|
-
index
|
|
145
|
+
index,
|
|
146
|
+
ignore_unavailable: true
|
|
167
147
|
});
|
|
168
148
|
} catch (ex) {
|
|
169
|
-
throw new _error.default(`Could not delete elasticsearch index "${index}" after model record
|
|
170
|
-
error: ex
|
|
149
|
+
throw new _error.default(`Could not delete elasticsearch index "${index}" after model record delete.`, "DELETE_MODEL_INDEX_ERROR", {
|
|
150
|
+
error: ex,
|
|
151
|
+
index,
|
|
152
|
+
model
|
|
171
153
|
});
|
|
172
154
|
}
|
|
173
155
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["createPartitionKey","params","tenant","locale","createSortKey","modelId","createKeys","PK","SK","createType","createModelsStorageOperations","entity","elasticsearch","create","model","index","configurations","es","body","exists","indices","ex","WebinyError","error","keys","put","TYPE","delete","dynamodbError","elasticsearchError","update","original","message","code","deleteModel","get","item","list","where","queryAllParams","partitionKey","options","gte","items"],"mappings":"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","sourcesContent":["import {\n CmsModel,\n CmsModelStorageOperations,\n CmsModelStorageOperationsCreateParams,\n CmsModelStorageOperationsDeleteParams,\n CmsModelStorageOperationsGetParams,\n CmsModelStorageOperationsListParams,\n CmsModelStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport configurations from \"~/configurations\";\nimport WebinyError from \"@webiny/error\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\n\ninterface PartitionKeysParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeysParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CM`;\n};\n\ninterface SortKeyParams {\n modelId: string;\n}\nconst createSortKey = (params: SortKeyParams): string => {\n return params.modelId;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeysParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKey(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.model\";\n};\n\nexport interface CreateModelsStorageOperationsParams {\n entity: Entity<any>;\n elasticsearch: Client;\n}\nexport const createModelsStorageOperations = (\n params: CreateModelsStorageOperationsParams\n): CmsModelStorageOperations => {\n const { entity, elasticsearch } = params;\n\n const create = async (params: CmsModelStorageOperationsCreateParams) => {\n const { model } = params;\n\n const { index } = configurations.es({\n model\n });\n try {\n const { body: exists } = await elasticsearch.indices.exists({\n index\n });\n if (!exists) {\n await elasticsearch.indices.create({\n index\n });\n }\n } catch (ex) {\n throw new WebinyError(\n \"Could not create Elasticsearch indice.\",\n \"ELASTICSEARCH_INDICE_CREATE_ERROR\",\n {\n error: ex,\n index,\n model\n }\n );\n }\n\n const keys = createKeys(model);\n\n let error;\n try {\n await entity.put({\n ...model,\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n error = ex;\n }\n /**\n * In case of DynamoDB error we need to remove the index we created.\n */\n try {\n await elasticsearch.indices.delete({\n index\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record failed to be created.`,\n \"DELETE_MODEL_INDICE_ERROR\",\n {\n dynamodbError: error,\n elasticsearchError: ex\n }\n );\n }\n throw error;\n };\n\n const update = async (params: CmsModelStorageOperationsUpdateParams) => {\n const { original, model } = params;\n\n const keys = createKeys(model);\n\n try {\n await entity.put({\n ...model,\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update model.\",\n ex.code || \"MODEL_UPDATE_ERROR\",\n {\n error: ex,\n model,\n original,\n keys\n }\n );\n }\n };\n\n const deleteModel = async (params: CmsModelStorageOperationsDeleteParams) => {\n const { model } = params;\n const keys = createKeys(model);\n\n try {\n await entity.delete(keys);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete model.\",\n ex.code || \"MODEL_DELETE_ERROR\",\n {\n error: ex,\n model,\n keys\n }\n );\n }\n const { index } = configurations.es({\n model\n });\n /**\n * In case of DynamoDB error we need to remove the index we created.\n */\n try {\n await elasticsearch.indices.delete({\n index\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record was deleted.`,\n \"DELETE_MODEL_INDICE_ERROR\",\n {\n error: ex\n }\n );\n }\n return model;\n };\n\n const get = async (params: CmsModelStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const item = await getRecord<CmsModel>({\n entity,\n keys\n });\n return cleanupItem(entity, item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get model.\",\n ex.code || \"MODEL_GET_ERROR\",\n {\n error: ex,\n keys\n }\n );\n }\n };\n\n const list = async (params: CmsModelStorageOperationsListParams) => {\n const { where } = params;\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(where),\n options: {\n gte: \" \"\n }\n };\n try {\n const items = await queryAll<CmsModel>(queryAllParams);\n\n return cleanupItems(entity, items);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list models.\",\n ex.code || \"MODEL_LIST_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey\n }\n );\n }\n };\n\n return {\n create,\n update,\n delete: deleteModel,\n get,\n list\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["createPartitionKey","params","tenant","locale","createSortKey","modelId","createKeys","PK","SK","createType","createModelsStorageOperations","entity","elasticsearch","create","model","index","configurations","es","keys","error","put","TYPE","ex","indices","delete","ignore_unavailable","WebinyError","dynamodbError","elasticsearchError","update","message","code","deleteModel","get","item","list","where","queryAllParams","partitionKey","options","gte","items"],"mappings":"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","sourcesContent":["import {\n CmsModel,\n CmsModelStorageOperations,\n CmsModelStorageOperationsCreateParams,\n CmsModelStorageOperationsDeleteParams,\n CmsModelStorageOperationsGetParams,\n CmsModelStorageOperationsListParams,\n CmsModelStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { configurations } from \"~/configurations\";\nimport WebinyError from \"@webiny/error\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\n\ninterface PartitionKeysParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeysParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CM`;\n};\n\ninterface SortKeyParams {\n modelId: string;\n}\nconst createSortKey = (params: SortKeyParams): string => {\n return params.modelId;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeysParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKey(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.model\";\n};\n\nexport interface CreateModelsStorageOperationsParams {\n entity: Entity<any>;\n elasticsearch: Client;\n}\nexport const createModelsStorageOperations = (\n params: CreateModelsStorageOperationsParams\n): CmsModelStorageOperations => {\n const { entity, elasticsearch } = params;\n\n const create = async (params: CmsModelStorageOperationsCreateParams) => {\n const { model } = params;\n\n const { index } = configurations.es({\n model\n });\n\n const keys = createKeys(model);\n\n let error;\n try {\n await entity.put({\n ...model,\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n error = ex;\n }\n /**\n * In case of DynamoDB error we need to remove the index we created.\n */\n try {\n await elasticsearch.indices.delete({\n index,\n ignore_unavailable: true\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record failed to be created.`,\n \"DELETE_MODEL_INDEX_ERROR\",\n {\n dynamodbError: error,\n elasticsearchError: ex\n }\n );\n }\n throw error;\n };\n\n const update = async (params: CmsModelStorageOperationsUpdateParams) => {\n const { model } = params;\n\n const keys = createKeys(model);\n\n try {\n await entity.put({\n ...model,\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update model.\",\n ex.code || \"MODEL_UPDATE_ERROR\",\n {\n error: ex,\n model,\n keys\n }\n );\n }\n };\n\n const deleteModel = async (params: CmsModelStorageOperationsDeleteParams) => {\n const { model } = params;\n const keys = createKeys(model);\n\n const { index } = configurations.es({\n model\n });\n\n try {\n await entity.delete(keys);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete model.\",\n ex.code || \"MODEL_DELETE_ERROR\",\n {\n error: ex,\n model,\n keys\n }\n );\n }\n /**\n * Always delete the model index after deleting the model.\n */\n try {\n await elasticsearch.indices.delete({\n index,\n ignore_unavailable: true\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record delete.`,\n \"DELETE_MODEL_INDEX_ERROR\",\n {\n error: ex,\n index,\n model\n }\n );\n }\n\n return model;\n };\n\n const get = async (params: CmsModelStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const item = await getRecord<CmsModel>({\n entity,\n keys\n });\n return cleanupItem(entity, item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get model.\",\n ex.code || \"MODEL_GET_ERROR\",\n {\n error: ex,\n keys\n }\n );\n }\n };\n\n const list = async (params: CmsModelStorageOperationsListParams) => {\n const { where } = params;\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(where),\n options: {\n gte: \" \"\n }\n };\n try {\n const items = await queryAll<CmsModel>(queryAllParams);\n\n return cleanupItems(entity, items);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list models.\",\n ex.code || \"MODEL_LIST_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey\n }\n );\n }\n };\n\n return {\n create,\n update,\n delete: deleteModel,\n get,\n list\n };\n};\n"]}
|
|
@@ -88,8 +88,7 @@ const createSettingsStorageOperations = params => {
|
|
|
88
88
|
|
|
89
89
|
const update = async params => {
|
|
90
90
|
const {
|
|
91
|
-
settings
|
|
92
|
-
original
|
|
91
|
+
settings
|
|
93
92
|
} = params;
|
|
94
93
|
const keys = createKeys(settings);
|
|
95
94
|
const dbSettings = convertToDbData(settings);
|
|
@@ -102,7 +101,6 @@ const createSettingsStorageOperations = params => {
|
|
|
102
101
|
error: ex,
|
|
103
102
|
settings,
|
|
104
103
|
dbSettings,
|
|
105
|
-
original,
|
|
106
104
|
keys
|
|
107
105
|
});
|
|
108
106
|
}
|