From 8b399ec00951e7c1c390902d6114d66dddd8c3f7 Mon Sep 17 00:00:00 2001 From: Stanislav Romanov Date: Tue, 22 Mar 2022 19:06:02 +0300 Subject: [PATCH] Add meilisearch.js as api --- app/routes/admin/indexes.js | 4 +- app/routes/admin/indexes/item.js | 4 +- app/services/meilisearch.js | 24 ++++++ app/templates/admin/indexes.hbs | 2 +- package-lock.json | 109 ++++++++++++++++++++++-- package.json | 1 + tests/unit/services/meilisearch-test.js | 12 +++ 7 files changed, 145 insertions(+), 11 deletions(-) create mode 100644 app/services/meilisearch.js create mode 100644 tests/unit/services/meilisearch-test.js diff --git a/app/routes/admin/indexes.js b/app/routes/admin/indexes.js index 255df8d..42aaab4 100644 --- a/app/routes/admin/indexes.js +++ b/app/routes/admin/indexes.js @@ -2,9 +2,9 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; export default class AdminIndexesRoute extends Route { - @service store; + @service meilisearch; async model() { - return this.store.findAll('index'); + return this.meilisearch.getRawIndexes(); } } diff --git a/app/routes/admin/indexes/item.js b/app/routes/admin/indexes/item.js index bdbda7f..42c50bd 100644 --- a/app/routes/admin/indexes/item.js +++ b/app/routes/admin/indexes/item.js @@ -2,6 +2,8 @@ import Route from '@ember/routing/route'; export default class AdminIndexesItemRoute extends Route { model({ index_id }) { - return this.modelFor('admin.indexes').find((item) => item.id === index_id); + return this.modelFor('admin.indexes').find( + (item) => item.name === index_id + ); } } diff --git a/app/services/meilisearch.js b/app/services/meilisearch.js new file mode 100644 index 0000000..3d6c0e1 --- /dev/null +++ b/app/services/meilisearch.js @@ -0,0 +1,24 @@ +import Service from '@ember/service'; +import { MeiliSearch } from 'meilisearch'; + +export default class MeilisearchService extends Service { + constructor() { + super(); + + const client = new MeiliSearch({ + host: 'http://127.0.0.1:7700', + }); + + return new Proxy(this, { + get(target, prop, receiver) { + return function (...args) { + if (typeof client[prop] === 'function') { + return client[prop].apply(client, args); + } + + return Reflect.get(target, prop, receiver); + }; + }, + }); + } +} diff --git a/app/templates/admin/indexes.hbs b/app/templates/admin/indexes.hbs index 5f91aeb..f61800e 100644 --- a/app/templates/admin/indexes.hbs +++ b/app/templates/admin/indexes.hbs @@ -8,7 +8,7 @@
  • {{item.name}} diff --git a/package-lock.json b/package-lock.json index 7b003e2..7202936 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,6 +60,7 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-qunit": "^7.2.0", "loader.js": "^4.7.0", + "meilisearch": "^0.25.0", "npm-run-all": "^4.1.5", "prettier": "^2.5.1", "qunit": "^2.18.0", @@ -8918,6 +8919,15 @@ "sha.js": "^2.4.8" } }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -17476,6 +17486,15 @@ "node": ">= 0.6" } }, + "node_modules/meilisearch": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.25.0.tgz", + "integrity": "sha512-TSIJTh5lva7WHBaoG3arNYQXuIAQkcD3BY09h2nHhjHS/wzxWKJM45x5bEC67Grw8zXihVqqmWty4a4ps4S+tg==", + "dev": true, + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, "node_modules/memory-fs": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", @@ -18036,12 +18055,23 @@ } }, "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/node-int64": { @@ -23025,6 +23055,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "node_modules/tree-sync": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/tree-sync/-/tree-sync-1.4.0.tgz", @@ -23925,6 +23961,12 @@ "defaults": "^1.0.3" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, "node_modules/webpack": { "version": "5.70.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", @@ -24049,6 +24091,16 @@ "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", "dev": true }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -31592,6 +31644,15 @@ "sha.js": "^2.4.8" } }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -38486,6 +38547,15 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, + "meilisearch": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.25.0.tgz", + "integrity": "sha512-TSIJTh5lva7WHBaoG3arNYQXuIAQkcD3BY09h2nHhjHS/wzxWKJM45x5bEC67Grw8zXihVqqmWty4a4ps4S+tg==", + "dev": true, + "requires": { + "cross-fetch": "^3.1.5" + } + }, "memory-fs": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", @@ -38952,10 +39022,13 @@ } }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } }, "node-int64": { "version": "0.4.0", @@ -42902,6 +42975,12 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "tree-sync": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/tree-sync/-/tree-sync-1.4.0.tgz", @@ -43654,6 +43733,12 @@ "defaults": "^1.0.3" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, "webpack": { "version": "5.70.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", @@ -43741,6 +43826,16 @@ "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", "dev": true }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 79fb4f3..129eeba 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,7 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-qunit": "^7.2.0", "loader.js": "^4.7.0", + "meilisearch": "^0.25.0", "npm-run-all": "^4.1.5", "prettier": "^2.5.1", "qunit": "^2.18.0", diff --git a/tests/unit/services/meilisearch-test.js b/tests/unit/services/meilisearch-test.js new file mode 100644 index 0000000..4cf8077 --- /dev/null +++ b/tests/unit/services/meilisearch-test.js @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | meilisearch', function (hooks) { + setupTest(hooks); + + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let service = this.owner.lookup('service:meilisearch'); + assert.ok(service); + }); +});