@webiny/api-headless-cms-ddb-es
Version:
DynamoDB and Elasticsearch storage operations plugin for Headless CMS API.
133 lines (129 loc) • 3.09 kB
JavaScript
;
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