|
|
@@ -53,14 +53,19 @@ app.get('/refresh', async (req, res, next) => {
|
|
|
});
|
|
|
|
|
|
/* Returns JSON array with the list of all the datasets */
|
|
|
-app.get('/datasets/:aoi?', async (req, res, next) => {
|
|
|
+app.get('/:aoi?/datasets/', async (req, res, next) => {
|
|
|
console.log('received datasets/ GET request')
|
|
|
const aoi = req.params.aoi || 'eu'
|
|
|
let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
if (!datasets) {
|
|
|
- const datasetsFilePath = aoi == 'cz' ? _datasetsCzFilePath : _datasetsFilePath
|
|
|
try {
|
|
|
- datasets = await nutsData.loadDatasets(datasetsFilePath)
|
|
|
+ if (aoi == 'cz') {
|
|
|
+ _datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
+ datasets = _datasetsCZ
|
|
|
+ } else {
|
|
|
+ _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
+ datasets = _datasets
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
|
@@ -69,7 +74,7 @@ app.get('/datasets/:aoi?', async (req, res, next) => {
|
|
|
});
|
|
|
|
|
|
/* Returns attractivity data for the region with ID equal to the 'nuts' parameter */
|
|
|
-app.get('/scores/:nuts', async (req, res, next) => {
|
|
|
+app.get('/:aoi?/scores/:nuts', async (req, res, next) => {
|
|
|
if (!_datasets) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
|
_datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
@@ -88,91 +93,81 @@ app.get('/scores/:nuts', async (req, res, next) => {
|
|
|
});
|
|
|
|
|
|
/* Returns attractivity data for all the regions in source CSV data. */
|
|
|
-app.get('/scores', async (req, res, next) => {
|
|
|
- if (!_datasets) { // datasets must be loaded prior to data loading
|
|
|
- try {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
- } catch (e) {
|
|
|
- res.send(e.toString() || e)
|
|
|
- }
|
|
|
- }
|
|
|
- if (!_ruralData) {
|
|
|
- try {
|
|
|
- _ruralData = await nutsData.loadRuralData(_dataFilePath, _datasets)
|
|
|
- } catch (e) {
|
|
|
- res.send(e.toString() || e)
|
|
|
- }
|
|
|
- }
|
|
|
- helpers.formatResponse(_ruralData, req, res)
|
|
|
-});
|
|
|
-
|
|
|
-/* Computes and returns attractivity data for all the NUTS regions based on the
|
|
|
- incomming datasets and factor weights. */
|
|
|
-app.post('/scores', async (req, res, next) => {
|
|
|
- //console.log("query: " + JSON.stringify(req.body.factors, null, 4));
|
|
|
- if (!_datasets) { // datasets must be loaded prior to data loading
|
|
|
- try {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
- } catch (e) {
|
|
|
- res.send(e.toString() || e)
|
|
|
- }
|
|
|
- }
|
|
|
- if (!_ruralData) {
|
|
|
- try {
|
|
|
- _ruralData = await nutsData.loadRuralData(_dataFilePath, _datasets)
|
|
|
- } catch (e) {
|
|
|
- res.send(e.toString() || e)
|
|
|
- }
|
|
|
- }
|
|
|
- returnAllScores(req, res, 'eu')
|
|
|
-});
|
|
|
-
|
|
|
-/* Returns attractivity data for all the regions in source CSV data. */
|
|
|
-app.get('/scores/cz', async (req, res, next) => {
|
|
|
+app.get('/:aoi?/scores', async (req, res, next) => {
|
|
|
console.log('received scores/cz GET request')
|
|
|
- if (!_datasetsCZ) { // datasets must be loaded prior to data loading
|
|
|
+ const aoi = req.params.aoi || 'eu'
|
|
|
+ let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
+ let ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralData
|
|
|
+ if (!datasets) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
|
- _datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
+ if (aoi == 'cz') {
|
|
|
+ _datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
+ datasets = _datasetsCZ
|
|
|
+ } else {
|
|
|
+ _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
+ datasets = _datasets
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
|
}
|
|
|
- if (!_ruralDataCZ) {
|
|
|
+ if (!ruralData) {
|
|
|
try {
|
|
|
- _ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, _datasetsCZ)
|
|
|
+ if (aoi == 'cz') {
|
|
|
+ _ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, datasets)
|
|
|
+ ruralData = _ruralDataCZ
|
|
|
+ } else {
|
|
|
+ _ruralData = await nutsData.loadRuralData(_dataFilePath, datasets)
|
|
|
+ ruralData = _ruralData
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
|
}
|
|
|
- helpers.formatResponse(_ruralDataCZ, req, res)
|
|
|
+ helpers.formatResponse(ruralData, req, res)
|
|
|
});
|
|
|
|
|
|
/* Computes and returns attractivity data for all the NUTS regions based on the
|
|
|
incomming datasets and factor weights. */
|
|
|
-app.post('/scores/cz', async (req, res, next) => {
|
|
|
- console.log('received scores/cz POST request')
|
|
|
+app.post('/:aoi?/scores', async (req, res, next) => {
|
|
|
+ console.log('received scores/ POST request')
|
|
|
//console.log("query: " + JSON.stringify(req.body.factors, null, 4));
|
|
|
- if (!_datasetsCZ) { // datasets must be loaded prior to data loading
|
|
|
+ const aoi = req.params.aoi || 'eu'
|
|
|
+ let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
+ let ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralData
|
|
|
+ if (!datasets) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
|
- _datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
+ if (aoi == 'cz') {
|
|
|
+ _datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
+ datasets = _datasetsCZ
|
|
|
+ } else {
|
|
|
+ _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
+ datasets = _datasets
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
|
}
|
|
|
- if (!_ruralDataCZ) {
|
|
|
+ if (!ruralData) {
|
|
|
try {
|
|
|
- _ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, _datasetsCZ)
|
|
|
+ if (aoi == 'cz') {
|
|
|
+ _ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, datasets)
|
|
|
+ ruralData = _ruralDataCZ
|
|
|
+ } else {
|
|
|
+ _ruralData = await nutsData.loadRuralData(_dataFilePath, datasets)
|
|
|
+ ruralData = _ruralData
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
|
}
|
|
|
- returnAllScores(req, res, 'cz')
|
|
|
+ returnAllScores(req, res, aoi)
|
|
|
});
|
|
|
|
|
|
/*
|
|
|
Only testing purposes
|
|
|
*/
|
|
|
-app.get('/runR/:aoi?', (req, res, next) => {
|
|
|
+app.get('/:aoi?/runR/', (req, res, next) => {
|
|
|
//console.log(console);
|
|
|
let aoi = req.params.aoi;
|
|
|
const filename = aoi == 'cz' ? './r/CZ_clusters.r' :'./r/selected_data.r';
|
|
|
@@ -197,7 +192,7 @@ app.get('/runR/:aoi?', (req, res, next) => {
|
|
|
/*
|
|
|
Just informative response. POST with JSON data is required.
|
|
|
*/
|
|
|
-app.get('/clusters/:aoi?', (req, res, next) => {
|
|
|
+app.get('/:aoi?/clusters/', (req, res, next) => {
|
|
|
const data = { response: '/clusters methods are only available under POST' }
|
|
|
helpers.formatResponse(data, req, res)
|
|
|
});
|
|
|
@@ -205,16 +200,22 @@ app.get('/clusters/:aoi?', (req, res, next) => {
|
|
|
/*
|
|
|
Modifies input CSV file, calls R script, loads the resulting CSV file and returns it
|
|
|
*/
|
|
|
-app.post('/clusters/:aoi?', async (req, res, next) => {
|
|
|
+app.post('/:aoi?/clusters/', async (req, res, next) => {
|
|
|
const aoi = req.params.aoi || 'eu'
|
|
|
let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
- const dataFilePath = aoi == 'cz' ? _dataCzFilePath : _dataFilePath
|
|
|
+ const dataFilePath = aoi == 'cz' ? _clusteringCzInputFilePath : _dataFilePath
|
|
|
const clusteringModifiedFilePath = aoi == 'cz' ? _clusteringCzModifiedFilePath : _clusteringModifiedFilePath
|
|
|
const idString = aoi == 'cz' ? 'LAU2' : 'NUTS_ID'
|
|
|
if (!datasets) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
|
const datasetsFilePath = aoi == 'cz' ? _datasetsCzFilePath : _datasetsFilePath
|
|
|
- datasets = await nutsData.loadDatasets(datasetsFilePath)
|
|
|
+ if (aoi == 'cz') {
|
|
|
+ _datasetsCZ = await nuts.loadDatasets(_datasetsCzFilePath)
|
|
|
+ datasets = _datasetsCZ
|
|
|
+ } else {
|
|
|
+ _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
+ datasets = _datasets
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
|
@@ -288,11 +289,12 @@ function renderPugReport(nuts, req, res) {
|
|
|
function returnAllScores(req, res, aoi = 'eu') {
|
|
|
let resData = []
|
|
|
const ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralData
|
|
|
+ const regionIdString = aoi == 'cz' ? 'lau2' : 'nuts'
|
|
|
ruralData.forEach(region => {
|
|
|
//var region = _ruralData[0];
|
|
|
let sumWeight = 0;
|
|
|
let sumValue = 0;
|
|
|
- let regionIndexes = { code: region.nuts };
|
|
|
+ let regionIndexes = { code: region[regionIdString] };
|
|
|
|
|
|
req.body.factors.forEach(f => {
|
|
|
let fi = nutsData.getFactorIndex(region, f);
|