More rest methods
This commit is contained in:
parent
5e5ecb69b8
commit
ec0edf4475
1 changed files with 62 additions and 29 deletions
|
|
@ -8,6 +8,9 @@ import { check } from 'meteor/check';
|
||||||
import SiteSettings from '/imports/api/SiteSettings/SiteSettings';
|
import SiteSettings from '/imports/api/SiteSettings/SiteSettings';
|
||||||
import ActiveFiresCollection from '/imports/api/ActiveFires/ActiveFires';
|
import ActiveFiresCollection from '/imports/api/ActiveFires/ActiveFires';
|
||||||
import { countRealFires } from '/imports/api/ActiveFires/server/countFires';
|
import { countRealFires } from '/imports/api/ActiveFires/server/countFires';
|
||||||
|
import { whichAreFalsePositives, firesUnion } from '/imports/api/FalsePositives/server/publications';
|
||||||
|
import FalsePositives from '/imports/api/FalsePositives/FalsePositives';
|
||||||
|
import Industries from '/imports/api/Industries/Industries';
|
||||||
|
|
||||||
Meteor.startup(() => {
|
Meteor.startup(() => {
|
||||||
const uptime = new Date();
|
const uptime = new Date();
|
||||||
|
|
@ -79,41 +82,71 @@ Meteor.startup(() => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function getFires(route, full) {
|
||||||
|
const lat = Number(route.urlParams.lat);
|
||||||
|
const lng = Number(route.urlParams.lng);
|
||||||
|
const km = Number(route.urlParams.km);
|
||||||
|
const { token } = route.urlParams;
|
||||||
|
check(lng, NumberBetween(-180, 180));
|
||||||
|
check(lat, NumberBetween(-90, 90));
|
||||||
|
check(km, NumberBetween(0, Meteor.isDevelopment ? 1000 : 100));
|
||||||
|
check(token, String);
|
||||||
|
|
||||||
|
if (token !== Meteor.settings.private.internalApiToken) {
|
||||||
|
console.warn(`WARNING: Query for fires in ${lat}, ${lng} in ${km} km radius with wrong token`);
|
||||||
|
return { error: 'Unauthorized' };
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Query for fires in ${lat}, ${lng} in ${km} km radius`);
|
||||||
|
|
||||||
|
const fires = ActiveFiresCollection.find({
|
||||||
|
ourid: {
|
||||||
|
$near: {
|
||||||
|
$geometry: {
|
||||||
|
type: 'Point',
|
||||||
|
coordinates: [lng, lat]
|
||||||
|
},
|
||||||
|
$maxDistance: km * 1000,
|
||||||
|
$minDistance: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
fields: {
|
||||||
|
lat: 1,
|
||||||
|
lon: 1,
|
||||||
|
when: 1,
|
||||||
|
scan: 1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!full) {
|
||||||
|
return { total: fires.count(), real: countRealFires(fires) };
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO only get real
|
||||||
|
const firesA = fires.fetch();
|
||||||
|
if (firesA.length > 0) {
|
||||||
|
const union = firesUnion(fires);
|
||||||
|
const falsePos = whichAreFalsePositives(FalsePositives, union);
|
||||||
|
const industries = whichAreFalsePositives(Industries, union);
|
||||||
|
return { fires: firesA, falsePos: falsePos.fetch(), industries: industries.fetch() };
|
||||||
|
}
|
||||||
|
return { fires: [] };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Maps to: /api/v1/fires-in/:lat/:lng/:km
|
// Maps to: /api/v1/fires-in/:lat/:lng/:km
|
||||||
// 100 km max
|
// 100 km max
|
||||||
// Ex: http://127.0.0.1:3000/api/v1/fires-in/token/38.736946/-9.142685/100
|
// Ex: http://127.0.0.1:3000/api/v1/fires-in/token/38.736946/-9.142685/100
|
||||||
apiV1.addRoute('fires-in/:token/:lat/:lng/:km', { authRequired: false }, {
|
apiV1.addRoute('fires-in/:token/:lat/:lng/:km', { authRequired: false }, {
|
||||||
get: function get() {
|
get: function get() {
|
||||||
const lat = Number(this.urlParams.lat);
|
return getFires(this, false);
|
||||||
const lng = Number(this.urlParams.lng);
|
}
|
||||||
const km = Number(this.urlParams.km);
|
});
|
||||||
const { token } = this.urlParams;
|
|
||||||
check(lng, NumberBetween(-180, 180));
|
|
||||||
check(lat, NumberBetween(-90, 90));
|
|
||||||
check(km, NumberBetween(0, 100));
|
|
||||||
check(token, String);
|
|
||||||
|
|
||||||
if (token !== Meteor.settings.private.internalApiToken) {
|
apiV1.addRoute('fires-in-full/:token/:lat/:lng/:km', { authRequired: false }, {
|
||||||
console.warn(`WARNING: Query for fires in ${lat}, ${lng} in ${km} km radius with wrong token`);
|
get: function get() {
|
||||||
return { error: 'Unauthorized' };
|
return getFires(this, true);
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`Query for fires in ${lat}, ${lng} in ${km} km radius`);
|
|
||||||
|
|
||||||
const fires = ActiveFiresCollection.find({
|
|
||||||
ourid: {
|
|
||||||
$near: {
|
|
||||||
$geometry: {
|
|
||||||
type: 'Point',
|
|
||||||
coordinates: [lng, lat]
|
|
||||||
},
|
|
||||||
$maxDistance: km * 1000,
|
|
||||||
$minDistance: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return { total: fires.count(), real: countRealFires(fires) };
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue