UNPKG

@webiny/api-headless-cms-ddb-es

Version:

DynamoDB and Elasticsearch storage operations plugin for Headless CMS API.

133 lines (129 loc) 3.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createElasticsearchBody = void 0; var _fields = require("./fields"); var _initialQuery = require("./initialQuery"); var _fullTextSearch = require("./fullTextSearch"); var _queryModifier = require("./plugins/queryModifier"); var _sortModifier = require("./plugins/sortModifier"); var _bodyModifier = require("./plugins/bodyModifier"); var _sort = require("./sort"); var _filtering = require("./filtering"); var _assignMinimumShouldMatchToQuery = require("./assignMinimumShouldMatchToQuery"); const createElasticsearchBody = ({ plugins, model, params }) => { const { fields, search: term, where, sort: initialSort, after, limit } = params; /** * We need the model fields constructed as a key -> field value, so we do not need to iterate through array when we require some field. */ const modelFields = (0, _fields.createModelFields)({ plugins, model }); /** * We need the query modifier plugins. */ const queryModifierPlugins = (0, _queryModifier.createQueryModifierPluginList)({ plugins, model }); /** * We need the sort modifier plugins. */ const sortModifierPlugins = (0, _sortModifier.createSortModifierPluginList)({ plugins, model }); /** * We need the body modifier plugins. */ const bodyModifierPlugins = (0, _bodyModifier.createBodyModifierPluginList)({ plugins, model }); /** * The initial elasticsearch query where we attach some default conditions we always need. */ const query = (0, _initialQuery.createInitialQuery)({ where, model }); /** * Apply the full text search, if term is set. */ (0, _fullTextSearch.applyFullTextSearch)({ model, plugins, query, term, fields }); const execFiltering = (0, _filtering.createExecFiltering)({ model, fields: modelFields, plugins }); execFiltering({ where, query }); for (const pl of queryModifierPlugins) { pl.modifyQuery({ query, model, where }); } const sort = (0, _sort.createElasticsearchSort)({ plugins, sort: initialSort, modelFields, model }); for (const pl of sortModifierPlugins) { pl.modifySort({ sort, model }); } const boolQuery = { must: query.must.length > 0 ? query.must : undefined, must_not: query.must_not.length > 0 ? query.must_not : undefined, should: query.should.length > 0 ? query.should : undefined, filter: query.filter.length > 0 ? query.filter : undefined }; (0, _assignMinimumShouldMatchToQuery.assignMinimumShouldMatchToQuery)({ query: boolQuery }); const body = { query: { bool: boolQuery }, sort, size: (limit || 0) + 1, search_after: after, track_total_hits: true }; for (const pl of bodyModifierPlugins) { pl.modifyBody({ body, model, where }); } return body; }; exports.createElasticsearchBody = createElasticsearchBody; //# sourceMappingURL=body.js.map