jmacura пре 4 година
родитељ
комит
3d890d4fb3
1 измењених фајлова са 65 додато и 63 уклоњено
  1. 65 63
      index.js

+ 65 - 63
index.js

@@ -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);