pointsight/apiHandler/example/main.js

115 lines
3.5 KiB
JavaScript
Raw Permalink Normal View History

2022-03-06 18:36:36 +01:00
const fs = require("fs");
const request = require("request");
const mysql = require("mysql");
const tools = require("../../functions");
let con = undefined;
function initialize(conection) {
console.error("!! THE EXAMPLE MODULE HAS BEEN ENABLED, NEVER ENABLE TO EXAMPLE MODULE !!")
con = conection;
const filePath = "./apiHandler/" + getModuleMeta().exactName + "/db_table_config.sql"
const array = fs
.readFileSync(filePath)
.toString()
.split("\n");
for (i in array) {
con.query(array[i], function (err, result) {
if (err) throw err;
console.log("Table created for " + getModuleMeta().title);
});
}
const requestURL = "https://example.com/api.json";
const mysqlQuery = "INSERT INTO " + getModuleMeta().exactName + " (" + getModuleMeta().exactName + "_id, " + getModuleMeta().exactName + "_name, " + getModuleMeta().exactName + "_description, source_id, " + getModuleMeta().exactName + "_loc_lat, " + getModuleMeta().exactName + "_loc_lng, " + getModuleMeta().exactName + "_protocol_id, " + getModuleMeta().exactName + "_link) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
request(requestURL, { json: true }, (err, res2, body) => {
if (err) {
throw err;
}
console.log("[" + getModuleMeta().title + "] Request done")
for (let c = 0; c < body.length; c++) {
const elm = body[c];
con.query(mysqlQuery, [c, elm.name, "", 0, elm.currentLocation.coordinates[1], elm.currentLocation.coordinates[0], 0, "https://api.opensensemap.org/boxes/" + elm._id], function (err, result) {
if (err) { throw (err) }
})
}
console.log("[" + getModuleMeta().title + "] Insert into Database done!")
});
}
function queryData(lat, lng, radius, minimal) {
/*
radius in km
*/
return new Promise(function (resolve, reject) {
// The Promise constructor should catch any errors thrown on
// this tick. Alternately, try/catch and reject(err) on catch.
let elementsToQuery = "*";
if (minimal) {
elementsToQuery = "id,loc_lat,loc_lng,source_id";
}
const sqlQuery =
"SELECT \
" +
elementsToQuery +
", \
( 6371 \
* acos( cos( radians(?) ) \
* cos( radians( " + getModuleMeta().exactName + "_loc_lat ) ) \
* cos( radians( " + getModuleMeta().exactName + "_loc_lng ) - radians(?) ) \
+ sin( radians(?) ) \
* sin( radians( " + getModuleMeta().exactName + "_loc_lat ) ) \
) \
) \
AS distance \
FROM " + getModuleMeta().exactName + " \
HAVING distance < ? \
ORDER BY distance";
con.query(sqlQuery, [lat, lng, lat, radius], function (err, rows, fields) {
// Call reject on error states,
// call resolve with results
if (err) {
return reject(err);
}
const results = [];
for (let e = 0; e < rows.length; e++) {
const currentRow = rows[e]
const element = {
"type": "request-info",
"source": getModuleMeta().title,
"titel": currentRow.example_name,
"description": "",
"url": currentRow.example_link,
"distance": currentRow.distance,
"location": {
"lat": currentRow.example_loc_lat,
"lng": currentRow.example_loc_lng
}
}
results.push(element)
}
resolve(results);
});
});
}
function getModuleMeta() {
return {
title: "Example",
exactName: "example",
country: ["*"],
limited: false,
};
}
module.exports = { initialize, queryData, getModuleMeta };