77 lines
2.3 KiB
JavaScript
77 lines
2.3 KiB
JavaScript
|
const sensemap = require("../apiHandler/opensensemap/main");
|
|||
|
const ttnantennas = require("../apiHandler/ttnantennas/main");
|
|||
|
const autobahn = require("../apiHandler/autobahn/main");
|
|||
|
const libs = require("../libs/metaHandler.lib.js");
|
|||
|
|
|||
|
const mods = [sensemap, ttnantennas, autobahn]; // Provided by main.ts in a real env.
|
|||
|
|
|||
|
const jsonData = {
|
|||
|
filters: [
|
|||
|
["tag", "webcam"],
|
|||
|
["country", "DEU"],
|
|||
|
],
|
|||
|
conjunction: "AND",
|
|||
|
}; // Provided by request in a real env
|
|||
|
|
|||
|
const uMods = mods.filter(function (elm) {
|
|||
|
// Loops through all elements in a list and lets you decide if weather to keep 'em or not
|
|||
|
let amount = 0;
|
|||
|
for (fId in jsonData.filters) {
|
|||
|
// Do this is each provided filter
|
|||
|
const fi = jsonData.filters[fId]; // Gets the current filters name
|
|||
|
switch (fi[0]) {
|
|||
|
case "tag":
|
|||
|
if (jsonData.conjunction == "OR") {
|
|||
|
if (libs.returnTags(elm).includes(fi[1])) {
|
|||
|
return elm;
|
|||
|
} else {
|
|||
|
break;
|
|||
|
}
|
|||
|
} else {
|
|||
|
if (libs.returnTags(elm).includes(fi[1])) {
|
|||
|
amount++;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
case "country":
|
|||
|
if (jsonData.conjunction == "OR") {
|
|||
|
if (libs.returnCountries(elm).includes(fi[1])) {
|
|||
|
return elm;
|
|||
|
} else {
|
|||
|
break;
|
|||
|
}
|
|||
|
} else {
|
|||
|
if (libs.returnCountries(elm).includes(fi[1])) {
|
|||
|
amount++;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (jsonData.conjunction == "AND") {
|
|||
|
if (amount == jsonData.filters.length) {
|
|||
|
return elm;
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
console.log(uMods);
|
|||
|
|
|||
|
/**
|
|||
|
* This things is sorting all given modules by a JSON array.
|
|||
|
* You can supply the ˋfilterˋ array with a list of filters
|
|||
|
* They are made up of ["metaData", "metaValue"]
|
|||
|
* Another argument is ˋconjunctionˋ it can be either AND or OR
|
|||
|
* OR means that any of the given filters should apply
|
|||
|
* AND means that all filter HAVE to apply
|
|||
|
*
|
|||
|
* Current state
|
|||
|
* This things can already handle OR requests, AND requests
|
|||
|
* are not supported yet. I also use the /libs/metaHandler lib,
|
|||
|
* at least I finnaly found a usecase for that waste of space.
|
|||
|
*
|
|||
|
* This is a small prototype which will be added into /routes/api.route.js
|
|||
|
* at some point. But what I was doing before was almost production testing.
|
|||
|
* Not good. I will need to test this further and throw some edge cases at it.
|
|||
|
*/
|