From 795764ad8d9fb6ed3b320f793107fe370e3d9b7f Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Wed, 19 Jun 2019 10:50:49 +0200
Subject: [PATCH] chore: cleanup code, rename var, fix typos

---
 deploy/datasets/query.js         | 73 ++++++++++++++++----------------
 deploy/datasets/spatialRouter.js |  3 +-
 2 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/deploy/datasets/query.js b/deploy/datasets/query.js
index 9d5332445..b0df2342c 100644
--- a/deploy/datasets/query.js
+++ b/deploy/datasets/query.js
@@ -15,12 +15,12 @@ const STORAGE_PATH = process.env.STORAGE_PATH || path.join(__dirname, 'data')
 
 let getPublicAccessToken
 
-const fetchDatasetFromKg = async (arg) => {
+const fetchDatasetFromKg = async ({ user } = {}) => {
 
-  const userState = await getUserKGRequestInfo(arg)
+  const { releasedOnly, option } = await getUserKGRequestInfo({ user })
 
   return await new Promise((resolve, reject) => {
-    request(`${queryUrl}${userState.releasedOnly ? '&databaseScope=RELEASED' : ''}`, userState.option, (err, resp, body) => {
+    request(`${queryUrl}${releasedOnly ? '&databaseScope=RELEASED' : ''}`, option, (err, resp, body) => {
       if (err)
         return reject(err)
       if (resp.statusCode >= 400)
@@ -185,7 +185,7 @@ exports.getPreview = ({ datasetName, templateSelected }) => getPreviewFile({ dat
  * change to real spatial query
  */
 const cachedMap = new Map()
-const fetchSpatialDataFromKg = async ({ templateName, queryArg, req }) => {
+const fetchSpatialDataFromKg = async ({ templateName, queryArg, user }) => {
    try {
     const filename = path.join(STORAGE_PATH, templateName + '.json')
     const exists = fs.existsSync(filename)
@@ -196,27 +196,16 @@ const fetchSpatialDataFromKg = async ({ templateName, queryArg, req }) => {
     
     const data = fs.readFileSync(filename, 'utf-8')
     const json = JSON.parse(data)
-    var splitQueryArg = queryArg.split('__');
-    const cubeDots = []    
-    splitQueryArg.forEach(element => {
-      cubeDots.push(element.split('_'))
-    });
-
+    const coordsString = queryArg.split('__');
+    const boundingBoxCorners = coordsString.map(coordString => coordString.split('_'))
 
     if (templateName !== 'Waxholm Space rat brain atlas v.2.0') {
-      return json.filter(filterByqueryArg(cubeDots))
+      return json.filter(filterByqueryArg(boundingBoxCorners))
     } else {
-        const centerDifference = [-9.550781, -24.355468, -9.707031]
-        let calculatedCubeDots = []
-        cubeDots.forEach((dots, index) => {
-            calculatedCubeDots[index] = cubeDots[index].map((num, idx) => {
-                return +num - centerDifference[idx]
-            })
-        })
-        calculatedCubeDots = calculatedCubeDots.map(x => transformToWoxel(x))
-        const resultFromKG = await getSpatialSearchOk({calculatedCubeDots, req})
-        if (resultFromKG && resultFromKG['total'] && resultFromKG['total'] > 0) {
-            return json.filter(filterByqueryArg(cubeDots))
+        const boundingBoxInWaxhomV2VoxelSpace = boundingBoxCorners.map(transformWaxholmV2NmToVoxel)
+        const { total = 0 } = await getSpatialSearchOk({boundingBoxInWaxhomV2VoxelSpace, user})
+        if (total > 0) {
+            return json.filter(filterByqueryArg(boundingBoxCorners))
         } else {
             return []
         }
@@ -227,8 +216,8 @@ const fetchSpatialDataFromKg = async ({ templateName, queryArg, req }) => {
   }
 }
 
-exports.getSpatialDatasets = async ({ templateName, queryGeometry, queryArg, req }) => {
-  return await fetchSpatialDataFromKg({ templateName, queryArg, req })
+exports.getSpatialDatasets = async ({ templateName, queryGeometry, queryArg, user }) => {
+  return await fetchSpatialDataFromKg({ templateName, queryArg, user })
 }
 
 
@@ -240,26 +229,21 @@ function filterByqueryArg(cubeDots) {
     if (cubeDots[0][0] <= px && px <= cubeDots[1][0] 
       && cubeDots[0][1] <= py && py <= cubeDots[1][1] 
       && cubeDots[0][2] <= pz && pz <= cubeDots[1][2]) {
-      return true;
+      return true
     }
+    return false
   } 
-  return false;   
 }
 
 
-async function getSpatialSearchOk(arg) {
+async function getSpatialSearchOk({ user, boundingBoxInWaxhomV2VoxelSpace }) {
 
-    const userState = await getUserKGRequestInfo(arg.req)
-    const option = {
-        headers: {
-            'Authorization': userState.token
-        }
-    }
+    const { releasedOnly, option } = await getUserKGRequestInfo({ user })
 
     const spatialQuery = 'https://kg.humanbrainproject.org/query/minds/core/dataset/v1.0.0/spatialSimple/instances?size=10'
 
     return await new Promise((resolve, reject) => {
-        request(`${spatialQuery}${'&boundingBox=waxholmV2:' + arg.calculatedCubeDots[0].concat(arg.calculatedCubeDots[1])}${userState.releasedOnly ? '&databaseScope=RELEASED' : ''}`, option, (err, resp, body) => {
+        request(`${spatialQuery}&boundingBox=waxholmV2:${boundingBoxInWaxhomV2VoxelSpace.map(cornerCoord => cornerCoord.join(',')).join(',')}${releasedOnly ? '&databaseScope=RELEASED' : ''}`, option, (err, resp, body) => {
             if (err)
                 return reject(err)
             if (resp.statusCode >= 400)
@@ -270,8 +254,8 @@ async function getSpatialSearchOk(arg) {
     })
 }
 
-async function getUserKGRequestInfo(arg) {
-    const accessToken = arg && arg.user && arg.user.tokenset && arg.user.tokenset.access_token
+async function getUserKGRequestInfo({ user }) {
+    const accessToken = user && user.tokenset && user.tokenset.access_token
     const releasedOnly = !accessToken
     let publicAccessToken
     if (!accessToken && getPublicAccessToken) {
@@ -288,8 +272,23 @@ async function getUserKGRequestInfo(arg) {
     return {option, releasedOnly, token: accessToken || publicAccessToken || process.env.ACCESS_TOKEN}
 }
 
-const transformToWoxel = (coord) => {
+/**
+ * 
+ */
+const transformWaxholmV2NmToVoxel = (coord) => {
+  /**
+   * as waxholm is already in RAS, does not need to swap axis
+   */
+
+  /**
+   * atlas viewer applies translation (below in nm) in order to center the brain
+   * query already translates nm to mm, so the unit of transl should be [mm, mm, mm]
+   */
   const transl = [-9550781,-24355468,-9707031].map(v => v / 1e6)
+  
+  /**
+   * mm/voxel
+   */
   const voxelDim = [0.0390625, 0.0390625, 0.0390625]
   return coord.map((v, idx) => (v - transl[idx]) / voxelDim[idx] )
 }
diff --git a/deploy/datasets/spatialRouter.js b/deploy/datasets/spatialRouter.js
index 400da2aee..ef6574fc6 100644
--- a/deploy/datasets/spatialRouter.js
+++ b/deploy/datasets/spatialRouter.js
@@ -25,8 +25,9 @@ router.get('/templateName/:templateName/:queryGeometry/:queryArg', (req, res, ne
       trace: 'dataset#spatialRouter'
     })
 
+  const { user } = req
 
-  getSpatialDatasets({ templateName, queryGeometry, queryArg, req })
+  getSpatialDatasets({ templateName, queryGeometry, queryArg, user })
     .then(arr => res.status(200).json(arr))
     .catch(error => {
       next({
-- 
GitLab