alanning:roles removed (client crashed the whole bundle; plain user.roles checks instead), selaias:cookie-consent replaced by in-repo React banner, publish-performant-counts vendored with countAsync, Meteor.autorun dropped (App)/Tracker.autorun (FiresMap), and the map publications not covered by the REST smoke (activefiresmyloc, activefiresunionmyloc, fireAlerts, oauth.verifyConfiguration) converted to async APIs. Verified in browser: / and /fires render with map + cookie banner, zero uncaught exceptions. REST smoke byte-identical (12/12).
80 lines
2.5 KiB
JavaScript
80 lines
2.5 KiB
JavaScript
/* global Counter */
|
|
/* eslint-disable import/no-absolute-path */
|
|
/* eslint-disable prefer-arrow-callback */
|
|
|
|
import { Meteor } from 'meteor/meteor';
|
|
import { check } from 'meteor/check';
|
|
import { NumberBetween } from '/imports/modules/server/other-checks';
|
|
// import { whichAreFalsePositives, firesUnion } from '/imports/api/FalsePositives/server/publications';
|
|
// import FalsePositives from '/imports/api/FalsePositives/FalsePositives';
|
|
// import Industries from '/imports/api/Industries/Industries';
|
|
import ActiveFiresUnion from '../ActiveFiresUnion';
|
|
|
|
const counter = new Counter('countActiveFiresUnion', ActiveFiresUnion.find({}));
|
|
|
|
Meteor.publish('activefiresuniontotal', function total() {
|
|
return counter;
|
|
});
|
|
|
|
const activeFiresUnion = async (b1, b2, c1, c2, withMarks) => {
|
|
// a --- b
|
|
// c --- d
|
|
const geometry = {
|
|
$geometry: {
|
|
type: 'Polygon',
|
|
coordinates: [[
|
|
[c1, c2],
|
|
[c1, b2],
|
|
[b1, b2],
|
|
[b1, c2],
|
|
[c1, c2]
|
|
]]
|
|
}
|
|
};
|
|
// console.log(JSON.stringify(geometry));
|
|
const fires = ActiveFiresUnion.find({
|
|
shape: {
|
|
$geoIntersects: geometry
|
|
}
|
|
}, {
|
|
fields: {
|
|
shape: 1,
|
|
centerid: 1,
|
|
when: 1,
|
|
createdAt: 1,
|
|
updatedAt: 1
|
|
}
|
|
});
|
|
|
|
if (Meteor.isDevelopment) console.log(`Active fires union total: ${await fires.countAsync()}`);
|
|
|
|
/*
|
|
if (withMarks && fires.fetch().length > 0) {
|
|
const union = firesUnion(fires);
|
|
const falsePos = whichAreFalsePositives(FalsePositives, union);
|
|
const industries = whichAreFalsePositives(Industries, union);
|
|
return [fires, falsePos, industries];
|
|
} */
|
|
|
|
return fires;
|
|
};
|
|
|
|
Meteor.publish('activefiresunionmyloc', async function activeInMyLoc(northEastLng, northEastLat, southWestLng, southWestLat, withMarks) {
|
|
// latitude -90 and 90 and the longitude between -180 and 180
|
|
check(northEastLng, NumberBetween(-180, 180));
|
|
check(southWestLat, NumberBetween(-90, 90));
|
|
check(southWestLng, NumberBetween(-180, 180));
|
|
check(northEastLat, NumberBetween(-90, 90));
|
|
check(withMarks, Boolean);
|
|
|
|
// I use this for fire stats
|
|
// if (!Meteor.isDevelopment) return this.ready(); // empty
|
|
return activeFiresUnion(northEastLng, northEastLat, southWestLng, southWestLat, withMarks);
|
|
});
|
|
|
|
// Warning: this increase always by one the fire stats
|
|
Meteor.publish('lastFireUnionDetected', function lastFireDetected() {
|
|
// I use this for fire stats
|
|
// if (!Meteor.isDevelopment) return this.ready(); // empty
|
|
return ActiveFiresUnion.find({}, { limit: 1, sort: { when: -1 } });
|
|
});
|