fix api global options.

This commit is contained in:
Ahmed Bouhuolia
2020-04-15 20:13:55 +02:00
parent d02517e66d
commit ff0a26a790
7 changed files with 281 additions and 25 deletions

View File

@@ -1,5 +1,8 @@
export default class MetableCollection {
/**
* Constructor method.
*/
constructor() {
this.metadata = [];
this.KEY_COLUMN = 'key';
@@ -21,13 +24,29 @@ export default class MetableCollection {
this.model = model;
}
/**
* Sets a extra columns.
* @param {Array} columns -
*/
setExtraColumns(columns) {
this.extraColumns = columns;
}
/**
* Find the given metadata key.
* @param {String} key -
* @return {object} - Metadata object.
*/
findMeta(key) {
return this.allMetadata().find((meta) => meta.key === key);
findMeta(payload) {
const { key, extraColumns } = this.parsePayload(payload);
return this.allMetadata().find((meta) => {
const isSameKey = meta.key === key;
const sameExtraColumns = this.extraColumns.some((extraColumn) => {
return !extraColumns || (extraColumns[extraColumn] === meta[extraColumn]);
});
return isSameKey && sameExtraColumns;
});
}
/**
@@ -42,8 +61,8 @@ export default class MetableCollection {
* @param {String} key -
* @param {Mixied} defaultValue -
*/
getMeta(key, defaultValue) {
const metadata = this.findMeta(key);
getMeta(payload, defaultValue) {
const metadata = this.findMeta(payload);
return metadata ? metadata.value : defaultValue || false;
}
@@ -79,7 +98,7 @@ export default class MetableCollection {
* @param {String} key -
* @param {String} value -
*/
setMeta(key, value, payload) {
setMeta(payload, ...args) {
if (Array.isArray(key)) {
const metadata = key;
@@ -88,18 +107,23 @@ export default class MetableCollection {
});
return;
}
const metadata = this.findMeta(key);
const { key, value, ...extraColumns } = this.parsePayload(payload, args[0]);
const metadata = this.findMeta(payload);
if (metadata) {
metadata.value = value;
metadata.markAsUpdated = true;
} else {
this.metadata.push({
value, key, ...payload, markAsInserted: true,
value, key, ...extraColumns, markAsInserted: true,
});
}
}
parsePayload(payload, value) {
return typeof payload !== 'object' ? { key: payload, value } : { ...payload };
}
/**
* Saved the modified/deleted and inserted metadata.
*/
@@ -111,7 +135,7 @@ export default class MetableCollection {
if (deleted.length > 0) {
deleted.forEach((meta) => {
const deleteOper = this.model.query().beforeRun((query, result) => {
const deleteOper = this.model.query().onBuild((query, result) => {
this.extraQuery(query, meta);
return result;
}).delete();