meilisearch-admin/app/models/index.js
2022-11-14 15:00:30 +03:00

135 lines
2.5 KiB
JavaScript

import query from '../utils/query';
import Document from './document';
import { dasherize } from '@ember/string';
const uri = 'https://docs.meilisearch.com/reference/api/document';
export default class Index {
constructor(data = {}) {
for (const key in data) {
this[key] = data[key];
}
}
get path() {
return `indexes/${this.uid}`;
}
get isNew() {
return Boolean(!this.uid);
}
get documentSetting() {
return {
uri,
fileMatch: [uri],
schema: this.schema,
};
}
get schema() {
return {
$id: uri,
type: 'object',
required: [this.primaryKey],
};
}
getStats() {
return query(`${this.path}/stats`);
}
getDocument(uid) {
return query(`${this.path}/documents/${uid}`).then(
(result) => new Document(result)
);
}
saveDocument(document) {
if (typeof document === 'string') {
document = JSON.parse(document);
}
return query(`${this.path}/documents`, {
method: 'POST',
body: JSON.stringify([document]),
});
}
saveDocuments(documents) {
if (typeof documents === 'string') {
documents = JSON.parse(documents);
}
return query(`${this.path}/documents`, {
method: 'POST',
body: JSON.stringify(documents),
});
}
deleteDocument(document) {
const document_id = document[this.primaryKey];
return query(`${this.path}/documents/${document_id}`, {
method: 'DELETE',
});
}
search(options) {
return query(`${this.path}/search`, {
method: 'POST',
body: JSON.stringify(options),
});
}
save(data) {
const path = this.isNew ? 'indexes' : this.path;
const method = this.isNew ? 'POST' : 'PATCH';
return query(path, {
method: method,
body: JSON.stringify(data),
});
}
getSetting(name) {
let url = `${this.path}/settings`;
if (name) {
url = `${url}/${dasherize(name)}`;
}
return query(url);
}
updateSetting(value, name) {
const method =
name === undefined ||
['faceting', 'pagination', 'typo-tolerance'].includes(name)
? 'PATCH'
: 'PUT';
let url = `${this.path}/settings`;
if (name) {
url = `${url}/${dasherize(name)}`;
}
return query(url, {
method: method,
body: JSON.stringify(value),
});
}
resetSetting(name) {
let url = `${this.path}/settings`;
if (name) {
url = `${url}/${dasherize(name)}`;
}
return query(url, {
method: 'DELETE',
});
}
}