From dc169746e7fa0f50a1f969653043e5a4d5fa0f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wieland=20Sch=C3=B6bl?= Date: Wed, 24 Feb 2021 15:31:22 +0100 Subject: [PATCH] feat: add support for range filters --- package-lock.json | 191 ++--------------------- package.json | 2 +- src/storage/elasticsearch/query.ts | 8 +- test/storage/elasticsearch/query.spec.ts | 4 +- 4 files changed, 17 insertions(+), 188 deletions(-) diff --git a/package-lock.json b/package-lock.json index b739adc3..acc1e0d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -614,203 +614,32 @@ } }, "@openstapps/core": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@openstapps/core/-/core-0.41.0.tgz", - "integrity": "sha512-cWzyVVUrQCrHk5EEuoWLfLt6cKLcDwoLY1UPxqschqeDmI+zlqBA0vnOsmAgVXZxv2+msFRYbkCiUd3Mofdzvg==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@openstapps/core/-/core-0.42.0.tgz", + "integrity": "sha512-s9mDC3GoOj1NOsjJ4OzzUeqsQVDoqt84IYkG0Y69BJ+4qoZuOvOe5hSOp3L8Nkj1P82jp/q0qjO/63cMphp2yw==", "requires": { - "@openstapps/core-tools": "0.16.0", + "@openstapps/core-tools": "0.17.0", "@types/geojson": "1.0.6", "@types/json-patch": "0.0.30", - "@types/json-schema": "7.0.6", + "@types/json-schema": "7.0.7", "@types/node": "10.17.44", "fast-clone": "1.5.13", + "fast-deep-equal": "3.1.3", "http-status-codes": "2.1.4", "json-patch": "0.7.0", "json-schema": "0.2.5", "ts-optchain": "0.1.8" }, "dependencies": { - "@openstapps/core-tools": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@openstapps/core-tools/-/core-tools-0.16.0.tgz", - "integrity": "sha512-agcRBjavO7TlgjDvoJEnUgXzDOW5w6us2VENZ73DUC+8QKc9okdjDuVIMy2oBrKGgOxJBg0G/xKqQN9CARqqAg==", - "requires": { - "@krlwlfrt/async-pool": "0.3.0", - "@openstapps/logger": "0.5.0", - "@types/glob": "7.1.1", - "@types/got": "9.6.9", - "@types/json-schema": "7.0.6", - "@types/mustache": "4.0.0", - "@types/node": "10.17.21", - "ajv": "6.11.0", - "better-ajv-errors": "0.6.7", - "chai": "4.2.0", - "commander": "4.1.1", - "deepmerge": "4.2.2", - "del": "5.1.0", - "flatted": "2.0.1", - "glob": "7.1.6", - "got": "10.5.5", - "humanize-string": "2.1.0", - "json-schema": "0.2.5", - "mustache": "4.0.0", - "plantuml-encoder": "1.4.0", - "toposort": "2.0.2", - "ts-json-schema-generator": "0.60.0", - "ts-node": "8.6.2", - "typedoc": "0.18.0", - "typescript": "3.8.3" - }, - "dependencies": { - "@types/node": { - "version": "10.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", - "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==" - } - } - }, - "@sindresorhus/is": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-1.2.0.tgz", - "integrity": "sha512-mwhXGkRV5dlvQc4EgPDxDxO6WuMBVymGFd1CA+2Y+z5dG9MNspoQ+AWjl/Ld1MnpCL8AKbosZlDVohqcIwuWsw==" - }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/got": { - "version": "9.6.9", - "resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.9.tgz", - "integrity": "sha512-w+ZE+Ovp6fM+1sHwJB7RN3f3pTJHZkyABuULqbtknqezQyWadFEp5BzOXaZzRqAw2md6/d3ybxQJt+BNgpvzOg==", - "requires": { - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" }, "@types/node": { "version": "10.17.44", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz", "integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw==" - }, - "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "decompress-response": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", - "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==" - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "got": { - "version": "10.5.5", - "resolved": "https://registry.npmjs.org/got/-/got-10.5.5.tgz", - "integrity": "sha512-B13HHkCkTA7KxyxTrFoZfrurBX1fZxjMTKpmIfoVzh0Xfs9aZV7xEfI6EKuERQOIPbomh5LE4xDkfK6o2VXksw==", - "requires": { - "@sindresorhus/is": "^1.0.0", - "@szmarczak/http-timer": "^4.0.0", - "@types/cacheable-request": "^6.0.1", - "cacheable-lookup": "^2.0.0", - "cacheable-request": "^7.0.1", - "decompress-response": "^5.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^5.0.0", - "lowercase-keys": "^2.0.0", - "mimic-response": "^2.0.0", - "p-cancelable": "^2.0.0", - "p-event": "^4.0.0", - "responselike": "^2.0.0", - "to-readable-stream": "^2.0.0", - "type-fest": "^0.9.0" - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "to-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" - }, - "ts-node": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.2.tgz", - "integrity": "sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==", - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "3.1.1" - } - }, - "type-fest": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.9.0.tgz", - "integrity": "sha512-j55pzONIdg7rdtJTRZPKIbV0FosUqYdhHK1aAYJIrUvejv1VVyBokrILE8KQDT4emW/1Ev9tx+yZG+AxuSBMmA==" } } }, diff --git a/package.json b/package.json index 1866b04b..dcf11d3c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "@elastic/elasticsearch": "5.6.20", - "@openstapps/core": "0.41.0", + "@openstapps/core": "0.42.0", "@openstapps/core-tools": "0.17.0", "@openstapps/logger": "0.5.0", "@types/node": "10.14.12", diff --git a/src/storage/elasticsearch/query.ts b/src/storage/elasticsearch/query.ts index 975f355b..44af66a1 100644 --- a/src/storage/elasticsearch/query.ts +++ b/src/storage/elasticsearch/query.ts @@ -201,14 +201,14 @@ export function buildFilter(filter: SCSearchFilter): case 'date range': const dateRangeObject: ESDateRange = {}; if (filter.arguments.bounds.lowerBound?.mode === 'exclusive') { - dateRangeObject.lt = filter.arguments.bounds.lowerBound.limit; + dateRangeObject.gt = filter.arguments.bounds.lowerBound.limit; } else if (filter.arguments.bounds.lowerBound?.mode === 'inclusive') { - dateRangeObject.lte = filter.arguments.bounds.lowerBound.limit; + dateRangeObject.gte = filter.arguments.bounds.lowerBound.limit; } if (filter.arguments.bounds.upperBound?.mode === 'exclusive') { - dateRangeObject.gt = filter.arguments.bounds.upperBound.limit; + dateRangeObject.lt = filter.arguments.bounds.upperBound.limit; } else if (filter.arguments.bounds.upperBound?.mode === 'inclusive') { - dateRangeObject.gte = filter.arguments.bounds.upperBound.limit; + dateRangeObject.lte = filter.arguments.bounds.upperBound.limit; } dateRangeObject.format = filter.arguments.format; dateRangeObject.time_zone = filter.arguments.timeZone; diff --git a/test/storage/elasticsearch/query.spec.ts b/test/storage/elasticsearch/query.spec.ts index 96c7545c..baaedef2 100644 --- a/test/storage/elasticsearch/query.spec.ts +++ b/test/storage/elasticsearch/query.spec.ts @@ -276,7 +276,7 @@ describe('Query', function () { limit: out, } // @ts-ignore implicit any - expectedFilter.range.price[`${location === 'upperBound' ? 'g' : 'l'}${bound === 'inclusive' ? 'te' : 't'}`] = out; + expectedFilter.range.price[`${location === 'lowerBound' ? 'g' : 'l'}${bound === 'inclusive' ? 'te' : 't'}`] = out; } } setBound('upperBound', upperMode); @@ -328,7 +328,7 @@ describe('Query', function () { limit: out, } // @ts-ignore implicit any - expectedFilter.range.price[`${location === 'upperBound' ? 'g' : 'l'}${bound === 'inclusive' ? 'te' : 't'}`] = out; + expectedFilter.range.price[`${location === 'lowerBound' ? 'g' : 'l'}${bound === 'inclusive' ? 'te' : 't'}`] = out; } } setBound('upperBound', upperMode);